プログラムのすべてのポイントを最適化する必要はないことを理解しています。配列の初期化を最適化する必要があると仮定しましょう。
だから私は比較するプログラムを書きまし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