C#中的Array.Sort如何超快?

Sha*_*she 7 c# sorting

嘿,我一直试图找到一个答案(在stackoverflow和google上)到C#中的Array.Sort是如此之快的问题.我找不到一个.

无论我使用哪种算法,我都没有设法比它更快地排序大数组.我知道它使用快速排序,但必须非常优化.

有谁知道他们怎么这么快?

Han*_*ant 18

它是标准的快速排序代码,用C#编写.您可以在ArraySortHelper <>.QuickSort中找到它,比如说Reflector.

分析代码时的一个非常标准的错误是在禁用JIT优化器的情况下执行此操作.运行Debug构建或附加调试器时会发生这种情况.当您对Array.Sort()方法进行概要分析时,这不会发生,当您的计算机上安装了.NET时,它会被ngen.exe预先设置.优化程序对生成的机器代码的质量有很大影响.检查此答案以了解它执行的优化类型.

您可以调试发布质量的机器代码,但这需要更改选项.首先切换到Release配置.然后工具+选项,调试,常规,取消勾选"在模块加载时抑制JIT优化".谨防陷阱,你会看到内联,代码提升和消除局部变量的影响.


Uwe*_*eim 5

您可以使用ILSpy来反汇编代码.我希望内部排序代码中的本机方法可以加快速度.

  • 嗯,奇怪.每当CLR中的某些东西很快,人们就会假设本机代码...... (5认同)
  • 我怀疑本地方法不被使用.在本机代码中交换对象引用在数组中没有那么多的性能优势,并且在比较方面没有*好处,因为它被委托给适当的Comparer方法.一个有趣的练习是比较Mono实现的BCL的List <T> .Sort()`方法与MS.NET版本的性能.如果它们具有相似的性能特征,只需查看Mono代码即可. (3认同)