Похоже, что Array.Reverse
имеет собственный код для обращения к массиву, который иногда не применяется и возвращается к использованию простого цикла for. В моем тестировании Array.Reverse
очень немного быстрее, чем простой цикл for. В этом тесте реверса массива 1000000 элементов 1000 раз 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;
}
}