x64対x86で.netプログラムを実行するために考慮する必要がある考慮事項はありますか?
質問
.Netプログラムを作成するとき、アーキテクチャタイプ(x86とx64)は抽象化されていると思いますが、問題を引き起こす可能性のある他の考慮事項はありますか?
解決
win32呼び出しを密かに行うサードパーティのCOMライブラリまたはサードパーティの.NETライブラリに注意してください。それが最大の頭痛の種でした。
他のヒント
MSDNドコ、その他の考慮事項から:
多くの場合、アセンブリは32ビットまたは64ビットCLRで同じように実行されます。プログラムが64ビットCLRで実行されたときに異なる動作をする理由には、次のものがあります。
以下のメンバーを含む構造 プラットフォームに応じてサイズを変更し、 任意のポインタ型など。
次を含むポインター演算 一定のサイズ。
不正なプラットフォーム呼び出しまたはCOM Int32を使用する宣言 IntPtrの代わりにハンドルします。
IntPtrをInt32にキャスト
また、デフォルトのファイルの場所。
この記事には、注意すべき多くの良い問題があります。 http://osnews.com/story/20330/Windows_x64_Watch_List
個人的に、私の上司は64ビットのVistaコンピューターを使用しており、32ビットモードでプログラミングしています。次の問題が発生しました。
-
32ビットアプリのレジストリは、Wow6432Nodeフォルダーに非表示になります。レジストリでパスを見つけるのに慣れているすべてのアプリがそのノードにあるわけではありません(たとえば、SQL Serverはそうではありません)。
-
C:\ Windowsフォルダー内のSysWow64は、DLLが必要な場所にないという問題を引き起こす可能性があります(サードパーティのライセンスコンポーネントでこの問題が発生しました)。
-
必要なファイルは、" C:\ Program Files"ではなく" C:\ Program Files(x86)"にある場合があります。吸います。
-
64ビット値の読み取りおよび書き込みは、32ビットプラットフォームではスレッドセーフではありません。 64ビット値の読み取りには、コンテキストスイッチによって中断される可能性のある2つの操作が必要です。 Threading.Interlocked.Read のMSDN記事を参照してください。 a>詳細については。
MSDNは、32ビットアプリケーションを64ビット実行環境に移植する問題に関する小さな論文を掲載していました。
http://msdn.microsoft.com/en-us/library /ms973190.aspx
他の2人のブロガーが以前にCLRチームで働いていたときに64ビット開発について書いていました
x64では、より多くのメモリをアドレス指定できますが、同じコードを指定すると、x86よりも多くのメモリを使用します。
私の経験では、Asp.NETアプリケーションの移植は基本的に完璧でした。 32ビットマシンと64ビットで実行すると、より多くのメモリが利用できることに加えて、問題は発生しません。これは、既に述べた多くの問題(レジストリ、スレッド処理など)がAsp.NETによって管理されており、Asp.NET環境で実行するにはそれらを適切に修正する必要があるためです。
クライアント側(Windowsフォーム)でも同じことが起こりましたが、「安全でない」ものを使用した場合は既に指摘したように、特別なフォルダーまたはレジストリーへのアクセスを取得するためのAPIは、何らかの問題が発生する可能性があります。
よろしく マッシモ