2008-08-18 54 views
10

我知道.NETJIT編譯爲您運行應用程序之前運行的體系結構,但JIT編譯器是否針對64位體系結構進行了優化?64bit .NET性能調優

編程將在64bit system上運行的應用程序時,是否有任何需要完成或考慮的事項? (即,使用Int64的Will會提高性能,JIT編譯器會自動使Int64在32位系統上工作嗎?)

回答

14

64bit JIT is different從32位的一個,所以我希望在輸出的一些差異 - 但我不會切換到64位只是爲了這一點,我不希望在CPU中獲得很多速度(如果有的話)時間通過切換到64位。

如果您的應用程序使用大量內存並且PC有足夠的RAM來跟上它,您會注意到性能有很大提升。我發現,32位.NET應用程序在使用大約1.6GB時傾向於開始拋出內存異常,但在此之前,由於paging很長,所以它們開始顛簸磁盤 - 因此您終止了I/O綁定。

基本上,如果你是瓶頸是CPU然後64位不太可能幫助。如果你的瓶頸是記憶,那麼你應該看到一個很大的改進。

將使用的Int64提高性能,將JIT編譯器自動進行32位系統的Int64工作

的Int64已經工作在32位和64位系統,但它會在64位更快的運行。所以如果你主要用Int64進行數據處理,那麼在64位系統上運行應該會有所幫助。

最重要的是measure你的表現。

0

無論體系結構是32位還是64位,性能瓶頸都是一樣的。性能問題往往是次優化算法的結果,在32位和64位類型之間進行選擇不會顯着影響性能。

最重要的是,在測量之前不要試圖提高某些東西的性能。特別是你應該剖析代碼來確定你的性能瓶頸在哪裏。

9

This是關於這個問題的一篇很好的文章,由一位工作在64位JIT上的人員之一。基本上,除非你絕對需要64位可提供的地址空間,或者需要執行64位數學計算,否則可能會失去性能。例如,隨着指針變大,緩存實際上被減半。

6

我注意到64位慢得多。

如前所述,64位JIT編譯器的行爲與x86 JIT編譯器的行爲不同。 x86編譯器將利用x64不優化的一些優化。

例如在.NET 3.5中,32位JIT將以struct作爲參數內聯函數調用,但64位JIT不會。

在生產代碼中,我已經看到了86建立運行速度高達20%,比64建立(無其他變動)

3

綜上所述,使用64位的只有

  1. 您需要額外的內存,並沒有辦法繞過它。
  2. 你編程例如科學應用程序,並需要提高數學精度

至於其他方面,截至今天,.NET中的64位編譯器已經下降了一步。

在.NET編譯器中完成的性能優化是一個大問題。