4

我想知道Array.Reverse()C# 会编译成什么以及进行了什么样的优化。

我的研究使我走上了多条道路,其中一些值得注意的是 XOR 方法,如下所示:

Reverse(Array)
{

   for(int i = 0, int len = Array.Length; i < Array.Length, i++ len--)
   {
       Array[i] ^= Array[len];
       Array[len] ^= Array[i];
       Array[i] ^= Array[len];
   }
}

我发现它非常有能力处理更小的数组。随着它们变大,尽管性能开始下降,但是由于反向过程的内存性质,它似乎具有最好的内存应用程序。

反转数组的第二个最值得注意的方法是使用临时数组,我不会写出来,因为它非常简单。但基本上将初始数组的第一个元素设置为临时数组的最后一个元素,依此类推。当内存不是问题时,这种方法往往是最快的方法。

所以我的问题是,是否Array.Reverse()使用特定的方法?如果不是,它如何确定使用哪种方法?这真的归结为我是否应该信任系统库和编译器来决定什么是最快的解决方案,以及我应该信任这个决定的程度。

4

1 回答 1

4

Array.Reverse目前在 .NET 框架中使用临时数组实现。您可以使用 ILSpy 找出答案。编译器对此没有发言权。该方法以某种方式实现,编译器在这里没有任何变化。

这是否是最佳解决方案取决于您认为最佳的解决方案,因此您需要自己定义它,然后附加分析器并验证它。

于 2013-04-30T13:12:13.767 回答