確実に動作するかどうかわからないモデルを使用していると思われるアプリケーションの半分を継承しました。ASP.NET WebサービスからステートフルアンマネージドC++クラスを呼び出す
それが呼び出しごとに
[DllImport ("kernel32.dll" , EntryPoint = "LoadLibraryA")]
public static extern int LoadLibrary(string lpLibFileName);
を使用して管理されていないC++ .DLLをロードした後、例えば、それにコールの数を行いASP.NETのWebサービスでありますアンマネージC++で
[DllImport(@"MyUnamanagedDLL.dll")]
public static extern string DoStuff();
コールの間状態を保持するためにシングルトンを使用している.dllを。これは、あまりにも遅いので、各Webサービス呼び出しではなく、ディスクとデータベースから1回だけ初期化して一連の低速処理をロードするだけです。
したがって、インスタンスがnullの場合、アンマネージ.dllが最初にGetinstance()を呼び出すと、インスタンスが初期化され、すべてのインスタンスがリロードされます。
webserviceで毎回FreeLibraryが呼び出されていないため、アンマネージクラスを毎回再初期化する必要があると考えられます。
このモデルはすべて信頼性がありますか? Webサービスがシャットダウンされ、アンマネージ状態が適切にクリーンアップされることを保証できますか? loadlibrary呼び出しの間に有効なシングルトンインスタンスを取得できるかどうかを確認できますか?
プロのヒント:これがシングルトンが悪い理由です。 – Puppy