配列を逆にするためのネイティブコードがあるように見えArray.Reverse
ますが、これは適用されない場合があり、単純なforループの使用にフォールバックします。私のテストArray.Reverse
では、単純なforループよりもわずかに高速です。1,000,000個の要素配列を1,000回反転するこのテストでArray.Reverse
は、約600ミリ秒ですが、forループは約800ミリ秒です。
ただし、使用する理由としてパフォーマンスはお勧めしませんArray.Reverse
。これは非常に小さな違いであり、ロードするとすぐに失われList
、配列を再びループします。とにかく、アプリのプロファイルを作成してパフォーマンスのボトルネックを特定するまでは、パフォーマンスについて心配する必要はありません。
public static void Test()
{
var a = Enumerable.Range(0, 1000000).ToArray();
var stopwatch = Stopwatch.StartNew();
for(int i=0; i<1000; i++)
{
Array.Reverse(a);
}
stopwatch.Stop();
Console.WriteLine("Elapsed Array.Reverse: " + stopwatch.ElapsedMilliseconds);
stopwatch = Stopwatch.StartNew();
for (int i = 0; i < 1000; i++)
{
MyReverse(a);
}
stopwatch.Stop();
Console.WriteLine("Elapsed MyReverse: " + stopwatch.ElapsedMilliseconds);
}
private static void MyReverse(int[] a)
{
int j = a.Length - 1;
for(int i=0; i<j; i++, j--)
{
int z = a[i];
a[i] = a[j];
a[j] = z;
}
}