スレッドセーフでないコードを .net フレームワークでラップする最良の方法は何ですか?
静的変数を使用しているため、スレッドセーフではないサードパーティのライブラリがあります。それを書き直すことはオプションではありません。このライブラリは、多数の同時呼び出しを受信する asp.net Web サービスによって使用されます。
私は現在、ロックを使用してスレッドの安全性を確保するプロキシ クラスにラップしています。
private static readonly object oneThreadAtATimePlease = new object();
public ISomething CalculateSomething(int someValue)
{
lock (oneThreadAtATimePlease)
{
return new UnsafeLibrary(someValue).DoSomething();
}
}
複数の呼び出し元がロックを待機する必要があるため、パフォーマンスは低下しますが、結果は正しいです。
このライブラリの複数のインスタンスをそれぞれ独自の AppDomain で実行することにより、パフォーマンスを向上させたいと考えています。これは合理的なアプローチですか?推奨する良いサンプル コードはありますか?