2011-05-28 14 views
6

嘿,我一直在試圖找到一個答案(在stackoverflow和谷歌)的問題如何在C#中的Array.Sort如此之快。 我沒有找到。C#中的Array.Sort如此超快?

無論使用哪種算法,我都沒有辦法對大數組進行排序。 我知道它使用快速排序,但它必須非常優化。

有誰知道他們是如何使它如此之快?

回答

6

您可以使用ILSpy反彙編代碼。我期望內部排序代碼中的本地方法可以加快速度。

+1

謝謝,我會試試看。 – 2011-05-28 14:16:03

+5

嗯,很奇怪。只要CLR中的某些東西很快,人們就會假定本地代碼... – 2011-05-28 14:47:00

+0

@Paul所以我的假設在這裏錯了嗎? – 2011-05-28 14:50:58

14

這是標準的quicksort代碼,用C#編寫。你可以在ArraySortHelper <> .QuickSort中找到它,例如Reflector。

分析代碼時,如果禁用JIT優化器,這是一個非常標準的錯誤。當您運行Debug版本或附加調試器時會發生這種情況。當您剖析Array.Sort()方法時,這種情況不會發生,當您的計算機上安裝.NET時,它是由ngen.exe預先拼寫的。優化器對生成的機器代碼的質量有很大的影響。請檢查this answer以瞭解其執行的優化類型。

您可以調試發佈質量機器代碼,但需要更改選項。首先切換到發佈配置。然後工具+選項,調試,常規,取消「在模塊加載時抑制JIT優化」。注意陷阱,你會看到內聯,代碼提升和局部變量消除的效果。

+0

這個解釋太多了,謝謝! 我必須在啓用優化的情況下重試它。 – 2011-05-28 15:43:19