簡體   English   中英

在64位計算機上基於AnyCPU vs x64平台構建的C#應用​​程序的性能

[英]Performance of a C# application built on AnyCPU vs x64 platform on a 64 bit machine

我必須在64位計算機上部署C#應用程序,盡管它也可能部署在32位計算機上。 我應該構建兩個針對x86和x64平台的獨立可執行文件,還是應該針對“AnyCPU”平台(在項目屬性的“構建”選項中指定)構建單個可執行文件。在C#程序集構建的目標“AnyCPU”之間是否存在任何性能差異?部署在64位計算機上與相同的程序集部署專門針對'x64'平台?

不,在64位Windows上運行的AnyCPU應用程序與在其上運行的x64應用程序之間的性能沒有差異。 標志更改的唯一內容是編譯程序集的標頭中的一些標志,CLR僅使用它來決定是使用x86還是x64,沒有別的

如果您在詢問在64位Windows上運行的x86應用程序與x64(或AnyCPU)之間是否存在差異,那么答案是肯定的。 兩者之間的差異是:

  • 64位顯然使用的引用是32位的兩倍,這意味着更大的內存消耗,但它也意味着你可以使用更多的內存
  • 64位可以使用更多僅在64位CPU模式下可用的寄存器
  • 64位JIT與32位JIT不同,它具有不同的優化集:例如64位JIT有時會使用尾調用優化,即使您沒有使用tail.特別請求它tail. 指令(例如C#從不這樣做)

作為上述答案的旁注。 使用AnyCPU在x64操作系統上使用P / InvokeDotNetInterop進入x86 DLL 可能會出現問題。 在沒有64位版本的DLL可用的情況下,可能需要編譯x86而不是AnyCPU,因為操作系統將嘗試加載64位版本......並且失敗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM