5

COM コンポーネントも PInvoke も使用しない純粋な .NET アプリケーションを想像してみてください。ターゲット システムが 32 ビットか 64 ビットかは重要ですか?

4

3 に答える 3

7

アプリケーションがAnyCPUをターゲットにしている場合、実行時の動作、特にメモリ使用量と制限が異なります。

64ビットでは、同じ32ビットメモリの制限はありません(理論的には最大2GBのメモリですが、実際には1.2〜1.6)。ただし、すべてのオブジェクト参照は2倍の大きさであるため、64ビットシステムはより多くのメモリを使用します。

また、64ビットシステムには追加のレジスタなどがあることが多いため、パフォーマンスがわずかに向上する場合があります。ただし、これはプラットフォーム固有です。

アプリケーションがx86をターゲットにしている場合、WoW64で実行され、32ビットシステムでの動作とほぼ同じように動作します。

于 2009-07-08T00:12:36.533 に答える
5

COMコンポーネント、P / Invokeなどのない安全なコードを想定すると、セマンティックの違いはないはずですが、パフォーマンスに影響を与える可能性があります。考えてみてください。64ビットではメモリが増えますが、参照は大きくなります。いくつか勝ち、いくつかを失う。

とにかく、ここにいくつかの有用な参考資料があります:

"[...] 100%タイプセーフなコードである.NETアプリケーションを考えてみましょう。このシナリオでは、32ビットマシンで実行している.NET実行可能ファイルを64ビットシステムに移動して、アセンブリは100%タイプセーフであるため、ネイティブコードまたはCOMオブジェクトへの依存関係がなく、アプリケーションが完全に制御下で実行されることを意味する「安全でない」コードがないことがわかります。 CLRは、ジャストインタイム(JIT)コンパイルの結果として生成されるバイナリコードが32ビットと64ビットで異なる一方で、実行されるコードが両方とも意味的に同じであることを保証します。 。[...]」

于 2009-07-08T00:37:55.727 に答える
4

Reed Copseyによって識別されたものとは別に、問題になる可能性のある別の方法は、「純粋な」アプリケーションがたまたまSystem.IntPtr構造体を使用しているか、安全でないコードを使用しているか(P / Invokeと同じではない)です。 )およびポインタ演算。

注意すべきもう1つの大きな問題は、 System.Runtime.InteropServices.Marshalクラスのほとんどすべての呼び出しです。そこに足を踏み入れるための素晴らしい方法はたくさんあります(もちろん、必要なときに非常に便利です)。

于 2009-07-08T00:36:18.613 に答える