我想知道C#中的Array.Reverse()
会编译成什么样的优化。
我的研究引导我走多条道路,其中一些值得注意的是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()
使用特定的方法吗?如果不是,它如何确定使用哪种方法?这真的归结为我是否应该信任系统库和编译器来决定什么是最快的解决方案,以及我应该信任多少决定。
答案 0 :(得分:4)
Array.Reverse
目前在.NET框架中使用临时数组实现。您可以使用ILSpy找到它。编译器在这方面没有发言权。该方法以某种方式实现,编译器没有任何改变。
这是否是最佳解决方案取决于您认为最佳的解决方案,因此您需要为自己定义,然后附加分析器并验证它。