x86アーキテクチャとx64アーキテクチャの両方での.Netアプリの開発の違いを理解しようとしています。同じソースを使用してx64とx86の両方でアプリを開発し、構成がanycpuであったとします(または、x64マシンではx64にすることができます)。これらのアプリケーションは両方ともx64アーキテクチャで同じパフォーマンスで実行されますか?私の質問を要約すると、その利点のためにx64アーキテクチャをターゲットにしていますが、たとえば4GBよりも多くのメモリがありますが、x64マシンで開発されたアプリケーションは、anycpuの構成でx86で開発されたアプリケーションよりも利点がありますか?
2 に答える
これらのアプリケーションは両方ともx64アーキテクチャで同じパフォーマンスで実行されますか?私の質問を要約すると、その利点のためにx64アーキテクチャをターゲットにしていますが、たとえば4GBよりも多くのメモリがありますが、x64マシンで開発されたアプリケーションは、anycpuの構成でx86で開発されたアプリケーションよりも利点がありますか?
いいえ。AnyCPUを対象とするアプリケーションは、x64を対象とする場合とまったく同じようにx64で実行されます。AnyCPUを使用すると、アプリケーションは64ビットOSで実行され、64ビットCLRを使用します(x64をターゲットとして構築されている場合とまったく同じ方法です)。
ただし、64ビットCLRの最適化とパフォーマンスの特性は異なるため、64ビットシステムでは32ビットオペレーティングシステムとは動作が異なります。
Reed Copseyが言うように、それらは同じパフォーマンスで実行されます。
ただし、パフォーマンスに関する考慮事項はさておき、可能であれば、x64マシンでアプリケーションをテストする必要があることを付け加えておきます。AnyCPUアプリケーションで発生する可能性のあるいくつかの落とし穴を見てきました。
ネイティブDLLは1つのアーキテクチャでのみ機能します。たとえば、アプリケーションがAnyCPU用にコンパイルされているが、32ビットのネイティブDLLを使用している場合、x86では正常に実行されますが、64ビットプロセスではそのDLLを使用できないため、x64ではクラッシュします。
特定のサイズであるIntPtrに依存しています。たとえば、サイズが4バイトであると仮定すると、64ビットプロセスとして実行しているときにバグが発生します。ここで、
sizeof(IntPtr)
は8です。