0

私の C# アプリでは、アンマネージ DLL をロードし、そこからいくつかの関数を呼び出すオープン ソース ライブラリを使用しています。

  1. 最初に、 fromvar instance = lib.CreateInstance("R.dll")を使用して DLL をロードする呼び出しを行いますLoadLibrarykernel32.dll
  2. 次にinstance.init()、ロードされたDLLから関数を呼び出す

コードをコンソール アプリとして実行すると正常に動作しますが、コードをASP.NET Web アプリに統合すると、2 回目の実行中にハングします。私が理解している限り、Webサーバー(IIS)は1つのプロセスを使用して多くのリクエストを処理するvar instance = lib.CreateInstance("R.dll")ため、2回目に呼び出されたときにDLLがすでにロードされています。

サーバー上で動作させるにはどうすればよいですか?サーバーへの各要求の後に DLL をアンロードする方法はありますか?

4

1 に答える 1

0

要求ごとに dll をロードおよびアンロードすることは、あまり良い考えではありません。あなたはあなたの反応をかなり遅くするでしょう。リクエストごとに必要な場合は、一度だけロードしてください。

何をするかは制御lib.CreateInstance("R.dll")できないため、インスタンスをシングルトン クラスに保持し、まだロードされていない場合にのみ CreateInstance を使用できます。

Jon Skeet には、スレッド セーフなシングルトンに関する優れた記事があります。

于 2013-01-17T11:14:46.127 に答える