Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Array.Sort在C#中的速度如何如此之快?_C#_Sorting - Fatal编程技术网

Array.Sort在C#中的速度如何如此之快?

Array.Sort在C#中的速度如何如此之快?,c#,sorting,C#,Sorting,嘿,我一直在试图找到一个答案(在stackoverflow和google上)来回答C#中的Array.Sort是如何快速的问题。 我没找到 无论我使用哪种算法,我都无法以比它更快的速度对大数组进行排序。 我知道它使用快速排序,但它必须非常优化 有人知道他们是怎么做到这么快的吗?你可以用它来反汇编代码。我希望内部排序代码中的本地方法能够加快速度。这是标准的快速排序代码,用C#编写。你可以在ArraySortHelper.QuickSort中找到它,比如说,Reflector 分析代码时的一个标准错

嘿,我一直在试图找到一个答案(在stackoverflow和google上)来回答C#中的Array.Sort是如何快速的问题。 我没找到

无论我使用哪种算法,我都无法以比它更快的速度对大数组进行排序。 我知道它使用快速排序,但它必须非常优化


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

你可以用它来反汇编代码。我希望内部排序代码中的本地方法能够加快速度。

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

分析代码时的一个标准错误是禁用JIT优化器。运行调试生成或附加调试程序时将发生这种情况。当您分析Array.Sort()方法时不会发生这种情况,它是在您的计算机上安装.NET时由ngen.exe预JIT的。优化器对生成的机器代码的质量有很大影响。检查它执行的优化类型


您可以调试发行版质量的机器代码,但这需要更改一个选项。首先切换到释放配置。然后工具+选项,调试,常规,取消勾选“在模块加载时抑制JIT优化”。当心陷阱,你会看到内联、代码提升和消除局部变量的效果。

谢谢,我会尝试一下。事实上,ArraySortHelper.QuickSort是用C#编写的。我怀疑没有使用本机方法。交换数组中的对象引用在本机代码中没有多少性能优势,在比较方面也没有什么优势,因为它被委托给了适当的比较器方法。一个有趣的练习是比较Mono实现BCL的
List.Sort()
方法与MS.NET版本的性能。如果它们有相似的性能特征,只需看看Mono代码。@Uwe-那没花多长时间.:-)@Uwe Keim。。我不知道在我写评论时,我只是假设没有涉及本机代码。这将在使用Array.Sort时施加严格的限制,因为在对资源的访问有限的环境中,可能不会获得任何性能提升。我的评论更具讽刺意味——人们应该开始理解“本机代码比托管代码快”的假设不会自动成立……这就解释了这么多,谢谢!我必须在启用优化的情况下重试。