34

C#アプリケーションを64ビットマシンに展開する必要がありますが、32ビットマシンにも展開できる可能性はわずかにあります。x86およびx64プラットフォームをターゲットとする2つの個別の実行可能ファイルをビルドする必要がありますか、または「AnyCPU」プラットフォームをターゲットとしてビルドされた単一の実行可能ファイルを使用する必要があります(プロジェクトプロパティの「ビルドオプション」で指定)。「AnyCPU」をターゲットとしてビルドされたC#アセンブリ間にパフォーマンスの違いはありますか?特に「x64」プラットフォームを対象に構築された同じアセンブリに対して、64ビットマシンにデプロイされていますか?

4

2 に答える 2

34

いいえ、64 ビット Windows で実行されている AnyCPU アプリケーションと、その上で実行されている x64 アプリケーションの間にパフォーマンスの違いはありません。フラグが変更される唯一のものは、コンパイルされたアセンブリのヘッダー内のいくつかのフラグであり、CLR はそれを x86 または x64 のどちらを使用するかを決定するためだけに使用します。

64 ビット Windows で実行されている x86 アプリケーションと x64 (または AnyCPU) で実行されているアプリケーションに違いがあるかどうかを尋ねた場合、答えはイエスです。両者の違いは次のとおりです。

  • 64 ビットは明らかに 32 ビットの 2 倍のサイズの参照を使用するため、メモリ消費量が大きくなりますが、より多くのメモリを使用できることも意味します。
  • 64 ビットは、CPU の 64 ビット モードでのみ使用可能なより多くのレジスタを使用できます。
  • 64 ビット JIT は 32 ビット JIT とは異なり、最適化のセットが異なります。たとえば、64 ビット JIT は、命令を使用して特に要求しなくても、テール コールの最適化tail.を使用することがあります (たとえば、C# では決して行われません)。 )
于 2012-06-16T09:01:23.037 に答える
8

上記の回答の補足として。AnyCPU を使用する x64 OS でP/InvokeまたはDotNetInteropを x86 DLL に使用すると、問題が発生する可能性があります。64 ビット バージョンの DLL が利用できない場合、OS が 64 ビット バージョンをロードしようとして失敗するため、AnyCPU ではなく x86 をコンパイルする必要がある場合があります。

于 2013-05-02T16:30:15.400 に答える