2011-05-11 10 views
13

私はVS 2010でC#プロジェクトのデフォルトのプラットフォームターゲットがx86(それはどのCPUでも使用されていました)であることに気付きました。.Net Platformターゲットの最適化

プラットフォームをx86 vs x64 vs任意のCPUに固定することに基づいて、コンパイラは最適化を実行しますか?

パフォーマンス上の理由から、1つのプラットフォームにアプリケーションを強制する必要がありますか?

+0

私はそれが最適化されているかどうかわかりませんが、x86用にコンパイルされたライブラリを参照する場合は、x86用のプロジェクトもビルドする必要があります。 – R0MANARMY

+1

変更は、64ビットプロセスとして実行することはめったになく、あまり最適ではない(多くのメモリが使用され、必要なライブラリなどをロードできない)ため、変更が行われました。 – Gabe

+1

これは@ Kragenの答えで掲示されていますが、おそらくここに入れておくべきです - この[question](http://stackoverflow.com/questions/516730/visual-studio-any-cpu-target)任意のCPU 'オプション。 –

答えて

15

以前のバージョンのVisual Studioではこれを「任意のCPU」に設定していました。これは、x86マシンでは常にx86を使用することになり、x64マシンではx64またはx86アセンブリがロードされているプロセスが32ビットか64ビットかどうかを確認してください。

問題があるのは、新しいプロセスを開始するとき、「Any CPU」オプションでビルドされた.Net exeは32ビットプロセスではなく64ビットプロセスになり、2つの理由で問題を引き起こす可能性があります。

  • x86用にコンパイルされたネイティブモジュール(ほとんどの場合)は、プロセスにそれ以上ロードされません(この問題のために気づかなかった場合には、 )。
  • また、実際にアプリケーションが4GB以上のアドレス空間を使用していない場合(つまり、64ビットOSで32ビットプロセスのオペレーティングシステムが1〜2GBのアドレス空間を確保していないことに注意してください)増加したポインタサイズのために32ビットコードより悪く実行される。

ので、いくつかのアプリケーションが実際に面倒を価値あるものにするために十分なアドレス空間(すなわちメモリ)を使用すると、デフォルトでは、これらの問題を回避するために、x86のに変更されました。

+0

すばらしい答え。情報をありがとう。 –

+1

私は、この[回答](http://stackoverflow.com/questions/516730/visual-studio-any-cpu-target)が「Any CPU」オプションを理解するのに役立つことも発見しました。 –

3

ライブラリがデフォルトでAny CPUとlibariesを常にAny Any CPUにする必要があることに気づくでしょう。最適化されていればEXEのみに適用され、それは意味がありません。いいえ、問題は、CPU実行ファイルは通常、自分が何をしているのかを知っている人の手を除いて価値があるよりも面倒です。そして、彼らが望むものを知っている人にとっては、デフォルトは深刻な問題ではありません。

私はこのポリシーに最初は同意しませんでしたが、x86デバッグの経験が優れているので、私はこれをそのままデフォルトとして受け入れるようになりました。