我知道我不应该优化程序的每一个点,让我们假设我必须优化数组初始化。
所以我写了比较for loop
的程序Array.Clear
using System;
using System.Diagnostics;
namespace TestArraysClear
{
class Program
{
static void Main(string[] args)
{
int[] a = new int[100000];
Stopwatch sw = Stopwatch.StartNew();
for (int i = 0; i < 10; i++)
{
sw.Reset();
sw.Start();
for (int j = 0; j < a.Length; j++)
{
a[j] = 0;
}
sw.Stop();
Console.WriteLine("for " + sw.ElapsedTicks);
sw.Reset();
sw.Start();
Array.Clear(a, 0, a.Length);
sw.Stop();
Console.WriteLine("Array.Clear " + sw.ElapsedTicks);
}
}
}
}
我机器上的输出:
for 1166
Array.Clear 80
for 1136
Array.Clear 91
for 1350
Array.Clear 71
for 1028
Array.Clear 72
for 962
Array.Clear 54
for 1185
Array.Clear 46
for 962
Array.Clear 55
for 1091
Array.Clear 55
for 988
Array.Clear 54
for 1046
Array.Clear 55
所以Array.Clear
大约比 . 快 20 倍for loop
。但Array.Clear
初始化为0
. 我可以以-1
某种方式将数组初始化为具有相同的性能吗?
upd:我不是在寻找一些“极端不安全”的代码。我正在寻找像Array.Clear
. 我只是想知道 .NET 提供快速 0 初始化,但 .NET 不提供对其他值的初始化。那么为什么.NET 比“-1”更喜欢“0”呢?
upd我想重置现有的数组。所以我正在寻找Array.Clear
将数组重置为的模拟,而-1
不是0