TLDR: .NET を 64 ビット OS にインストールする場合、32 ビット コンポーネントは常に存在しますか?
以前は、自分のアプリ ( IronScheme ) を完全に .xml としてコンパイルしていましAnyCPU
た。これはすべてのプラットフォームで問題なく機能しますが、64 ビット JIT コンパイラは私の好みには遅すぎるようです (一般的に起動が約 550% 遅く、約 25% 遅い)。起動の遅さは、アセンブリを NGEN することで解決できます。実際、そうすると、起動時間がさらに 500% 改善されます。これにより、64 ビットでの起動時間が約 2600% 向上します (3700ms 対 140ms)。32 ビットと 64 ビットの両方が NGEN 化されている場合、起動時間は同じですが、実行時のパフォーマンスは 32 ビットの方が優れています。
ほとんどの場合、64ビットはまったく必要ないため、実行可能ファイルでx86をターゲットにすることが最善の一般的な解決策になると思います(他のすべてのアセンブリは をターゲットAnyCPU
にしていますが、私が見る限り、実行可能ファイルはそれがどこに行くかを決定します) . したがって、x86 をターゲットとするものと x64 (または MS では amd64 と呼ぶ) をターゲットとする 2 つのスタートアップ実行可能ファイルを用意するという考えです。
32 ビット OS にインストールする場合、64 ビット コンポーネントが存在しないことを確認できます。しかし、逆の場合はどうでしょうか。.NET インストーラーは 32 ビットと 64 ビットの両方のコンポーネントをインストールしますか? ターゲットがランタイムと一致しない場合、非 AnyCPU アセンブリの NGEN は失敗するため、これは重要です。
例:
「IronScheme.Console.exe のコンパイル エラー: このバージョンの は、実行中の Windows のバージョンと互換性がありません。」
また、私のアプリケーションはデフォルトで .NET 2 および VS2008 用にビルドされているため、現時点では新しいAnyCPU (32-bit preferred)
オプション (VS2012/.NET 4.5) はオプションではありません。
PS:これが以前に尋ねられた場合は申し訳ありません。この特定の問題を検索する方法がわかりません。Google fu も失敗しました。