10

アプリが実行される直前に実行しているアーキテクチャにコンパイルされる こと.NETは知っていますが、JIT コンパイラは 64 ビット アーキテクチャに最適化されていますか?JIT

で実行されるアプリをプログラミングするときに、実行または検討する必要があることはあり64bit systemますか? (つまり、Int64 を使用するとパフォーマンスが向上し、JIT コンパイラは Int64 を 32 ビット システムで自動的に動作させますか?)

4

5 に答える 5

14

64 ビット JIT は 32 ビットのものとは異なるため、出力に多少の違いがあると予想されますが、そのためだけに 64 ビットに切り替えることはなく、CPU 時間の速度が (もしあれば) 向上することも期待できません。 64ビットに切り替えることによって。

アプリが大量のメモリを使用し、PC に十分な RAM がある場合、パフォーマンスが大幅に向上することに気付くでしょう。32 ビット .NET アプリは、使用中のメモリが約 1.6 GB になるとメモリ不足の例外をスローし始める傾向がありますが、そのかなり前にページングのためにディスクをスラッシングし始めるため、I/O バウンドになります。

基本的に、ボトルネックが CPU である場合、64 ビットが役立つ可能性は低いです。ボトルネックがメモリである場合、大きな改善が見られるはずです。

Int64 を使用するとパフォーマンスが向上し、JIT コンパイラは自動的に Int64 を 32 ビット システムで動作させますか?

Int64 は既に 32 ビットと 64 ビットの両方のシステムで動作しますが、64 ビットで実行するとより高速になります。そのため、Int64 を使用してほとんど数値計算を行っている場合は、64 ビット システムで実行すると役立つはずです。

最も重要なことは、パフォーマンスを測定することです。

于 2008-08-18T11:11:31.767 に答える
9

これは、64ビットJITに取り組んだ人の1人によるこのテーマに関する優れた記事です。基本的に、64ビットが提供できるアドレス空間が絶対に必要でない限り、または64ビット演算を実行する必要がない限り、パフォーマンスが低下する可能性があります。たとえば、ポインタが大きくなると、キャッシュは事実上半分になります。

于 2008-09-16T03:54:32.017 に答える
6

64ビットはかなり遅いことに気づきました。

前述のとおり、64 ビット JIT コンパイラは x86 JIT コンパイラとは異なる動作をします。x86 コンパイラーは、x64 コンパイラーが利用しないいくつかの最適化を利用します。

たとえば、.NET 3.5 では、32 ビット JIT は構造体を引数として関数呼び出しをインライン化しますが、64 ビット JIT はインライン化しません。

実稼働コードでは、x86 ビルドが x64 ビルドよりも 20% 高速に実行されるのを見てきました (他に変更はありません)。

于 2009-01-08T17:05:22.647 に答える
0

アーキテクチャが 32 ビットか 64 ビットかに関係なく、パフォーマンスのボトルネックは同じです。パフォーマンスの問題は、最適化されていないアルゴリズムの結果である傾向があります。32 ビット型と 64 ビット型のどちらを選択しても、パフォーマンスに大きな影響はありません。

最も重要なのは、測定する前にパフォーマンスを改善しようとしないことです。特に、コードをプロファイリングして、パフォーマンスのボトルネックがどこにあるかを判断する必要があります。

于 2008-08-18T10:57:09.130 に答える