6

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 も失敗しました。

4

1 に答える 1

5

32 ビット コンポーネントは常に 64 ビット OS に存在しますか?

いいえ。ただし、インストールされていない場合は、まれです。Windows Server Core 2008 R2 (およびおそらくCore 2012)は、 WOW64を個別のインストール可能で取り外し可能なコンポーネント (.NET ビットを含む) としてサポートします。もう少し詳しく知りたい方はこちらをご覧ください。

Server Core 2008 R2 の WOW64 コンポーネントをインストールするには、次を実行する必要があります。

開始 /w ocsetup NetFx3-ServerCore-WOW64

Server Core は、x64 コンポーネントが利用できる場所を見つけることができた唯一のケースですが、x86 コンポーネントは利用できない可能性があります。Server Core を対象としていない、またはサポートしていない場合は、x86 ビットが x64 ビットと一緒にあると想定しても安全だと思います。

于 2012-08-04T20:07:49.473 に答える