コンパイルを Windows 64 ビット用に最適化するにはどうすればよいですか?
4 に答える
念のため、実行時にチェックを行うこともできます。
using System;
using System.Runtime.InteropServices;
class SystemChecker
{
static bool Is64Bit
{
get { return Marshal.SizeOf(typeof(IntPtr)) == 8; }
}
}
マネージド プロジェクトは、選択したアーキテクチャに従って自動的にビルドされます => AMD64 で作成されたデフォルトの C# プロジェクトは、X86 では AMD64、X86 になります。ネイティブのものは、デフォルトで常に 32 ビットです。
プラットフォームを明示的に設定するには:
1 ソリューション エクスプローラーを開き、ソリューションを選択し、右クリック -> 構成マネージャー。
2 [アクティブ ソリューション プラットフォーム] に移動し、[新規] をクリックします。
3 表示される [新しいソリューション プラットフォーム] ダイアログで、新しいプラットフォームとして Itanium を選択します。「設定のコピー元」を「アクティブ ソリューション プラットフォーム」のデフォルト設定である「任意の CPU」に設定します。
4 [OK] をクリックします。
Patrick Desjardinsが言ったように、少し追加します。
Interopを使用し、32ビットでコンパイルされたサードパーティのDLLがある場合は注意してください。その場合、x86を使用するためにそれを使用するすべてのアセンブリを具体的に設定する必要があります。そうしないと、あらゆる種類の奇妙なことが起こります。
/platform
-flagを使用して 64 ビット用にコンパイルできます。Visual Studio Expressには単純な 64 ビット コンパイル設定がないことに注意してください。
詳細については、こちらとこちらをご覧ください。2 番目の情報源から取得した情報は次のとおりです。
64 ビット Windows オペレーティング システムの場合:
- でコンパイルされたアセンブリは、
/platform:x86
WOW64 で実行される 32 ビット CLR で実行されます。 - でコンパイルされた実行可能ファイルは
/platform:anycpu
、64 ビット CLR で実行されます。 - でコンパイルされた DLL
/platform:anycpu
は、ロード先のプロセスと同じ CLR で実行されます。
ランタイム チェック:
次のいずれかのオプションを使用して、実行時の実行ビット環境を確認できます。
bool is64BitProcess = IntPtr.Size == 8;
int bitProcess = IntPtr.Size*8;
//C# 4 provides System.Environment.Is64BitProcess
//TimothyP's solution:
bool is64BitProcess = Marshal.SizeOf(typeof(IntPtr)) == 8;