我知道.NET
是JIT
編譯爲您運行應用程序之前運行的體系結構,但JIT編譯器是否針對64位體系結構進行了優化?64bit .NET性能調優
編程將在64bit system
上運行的應用程序時,是否有任何需要完成或考慮的事項? (即,使用Int64的Will會提高性能,JIT編譯器會自動使Int64在32位系統上工作嗎?)
我知道.NET
是JIT
編譯爲您運行應用程序之前運行的體系結構,但JIT編譯器是否針對64位體系結構進行了優化?64bit .NET性能調優
編程將在64bit system
上運行的應用程序時,是否有任何需要完成或考慮的事項? (即,使用Int64的Will會提高性能,JIT編譯器會自動使Int64在32位系統上工作嗎?)
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你的表現。
無論體系結構是32位還是64位,性能瓶頸都是一樣的。性能問題往往是次優化算法的結果,在32位和64位類型之間進行選擇不會顯着影響性能。
最重要的是,在測量之前不要試圖提高某些東西的性能。特別是你應該剖析代碼來確定你的性能瓶頸在哪裏。
This是關於這個問題的一篇很好的文章,由一位工作在64位JIT上的人員之一。基本上,除非你絕對需要64位可提供的地址空間,或者需要執行64位數學計算,否則可能會失去性能。例如,隨着指針變大,緩存實際上被減半。
我注意到64位慢得多。
如前所述,64位JIT編譯器的行爲與x86 JIT編譯器的行爲不同。 x86編譯器將利用x64不優化的一些優化。
例如在.NET 3.5中,32位JIT將以struct作爲參數內聯函數調用,但64位JIT不會。
在生產代碼中,我已經看到了86建立運行速度高達20%,比64建立(無其他變動)
綜上所述,使用64位的只有
至於其他方面,截至今天,.NET中的64位編譯器已經下降了一步。
在.NET編譯器中完成的性能優化是一個大問題。