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

时间:2011-05-28 14:09:36

标签: c# sorting

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

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

有人知道他们是怎么这么快的吗?

2 个答案:

答案 0 :(得分:17)

这是标准的快速排序代码,用C#编写。你可以在ArraySortHelper<> .QuickSort中找到它,比如反射器。

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

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

答案 1 :(得分:5)

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