0

MSDAABデータベースオブジェクトの静的インスタンスを作成/再利用するシングルトンを持つコードに出くわしました。データベースオブジェクトは作成後にスレッドセーフですか?MSDAABドキュメントでいずれかの方法で何も見つかりませんでした。

4

1 に答える 1

1

この答えにもかかわらず、私は正式な答えはノーだと思います。

私がそう言う理由は、Databaseストアドプロシージャのパラメータを。というインスタンス変数にキャッシュするためparameterCacheです。

ClearParameterCache()アイテムはキャッシュに追加され、最初にのロックを取得せずにメソッドを使用してキャッシュをクリアすることもできますparameterCache

が呼び出された場合ClearParameterCache()、1つのスレッドがキャッシュにアイテムがあると見なし、別のスレッドがキャッシュをクリアし、最初のスレッドがアイテムを取得しようとすると、アイテムが削除されて例外がスローされる状況が発生する可能性があります。

幸いなことに、呼び出されない場合ClearParameterCache()、私が予想する最悪の事態は、最初にパラメーターが複数回導出され、(異なるスレッドによって)キャッシュに複数回追加される可能性があることです。私はそれをテストしていませんが、それでも動作するはずです(非効率的ですが)。

ですから、実際には、電話をかけない限り、ClearParameterCache()大丈夫だと思います。

于 2010-07-07T21:17:50.357 に答える