1

スレッドセーフでないコードを .net フレームワークでラップする最良の方法は何ですか?

静的変数を使用しているため、スレッドセーフではないサードパーティのライブラリがあります。それを書き直すことはオプションではありません。このライブラリは、多数の同時呼び出しを受信する asp.net Web サービスによって使用されます。

私は現在、ロックを使用してスレッドの安全性を確保するプロキシ クラスにラップしています。

private static readonly object oneThreadAtATimePlease = new object();
public ISomething CalculateSomething(int someValue)
{
    lock (oneThreadAtATimePlease)
    {
        return new UnsafeLibrary(someValue).DoSomething();
    }
}

複数の呼び出し元がロックを待機する必要があるため、パフォーマンスは低下しますが、結果は正しいです。

このライブラリの複数のインスタンスをそれぞれ独自の AppDomain で実行することにより、パフォーマンスを向上させたいと考えています。これは合理的なアプローチですか?推奨する良いサンプル コードはありますか?

4

3 に答える 3

2

キューを使用してメッセージ ベースのアプリケーションを作成することもできます。

次に、複数のスレッドがリクエストをキューに入れ、1 つのスレッドがこのキューで動作し、他のスレッドに結果を通知することができます。モニター クラスを使用することが常に最速の方法であるとは限りません。

AppDomains はオプションです。ただし、IPC に対処する必要があります。

于 2009-12-16T20:37:17.527 に答える
0

静的コンストラクターは次のことに役立ちます。

静的コンストラクターは、アプリケーション ドメインごとに 1 回だけ実行されることが保証されています...

于 2009-12-16T20:37:01.597 に答える
0

ワーカー オブジェクトのインスタンスを 1 つだけ含むシングルトンと、リクエスト キューはどうでしょうか。

于 2009-12-16T20:44:01.207 に答える