2012-01-23 14 views
0

VB.NET Webサーバーからカスタムの書込みアンマネージDLLに関数を呼び出しています。 このDLLをマルチコアサーバー上のWebサービス経由で呼び出すと、問題が発生し、常にクラッシュします。VB.NETからのアンマネージDLL呼び出しに対して特定のプロセッサアフィニティを強制的に適用します。

サーバーを再起動してシングルコアのみを使用すると、常に正常に動作し、クラッシュしません。

私はDLLコールの直前と直後にデバッグコードを出力しているので、DLLコールはクラッシュの原因であることを知っています。

.NETコードのプロセッサアフィニティを1コアに強制することはできますが、アンマネージDLLには適用されません。

アンマネージドDLLを強制的に単一のコアで実行するにはどうすれば問題を解決できるのでしょうか?

答えて

0

あなたはDLLのコードへのアクセス権を持っているなら、あなたはDllMain内の次の行のようなものを使用することができますが:

DWORD_PTR processAffinityMask = 0x1;

SetProcessAffinityMask(GetCurrentProcess(), processAffinityMask);

これは最初のCPUへのDLLのプロセスの親和性を設定します。

+0

ありがとう、私は本当に迅速な対応に感謝します。残念ながら、私たちはソースコードを持っていません。それは約10年前の古いFortranのDLLですが、それはまだ不可欠です。 –

関連する問題