サーバーごとに1つのインスタンスをインスタンス化するだけでよい共通のヘルパークラスをすべて共有するASP.NET Webサービスがいくつかあります。これはデータの単純な変換に使用されますが、起動時に web.config ファイルなどからの読み込みに時間がかかります。ヘルパー クラスは 100% スレッド セーフです。ユーティリティ呼び出しの単純なライブラリと考えてください。すべてのメソッドをクラスで共有したいのですが、web.config から初期構成をロードしたいと考えています。IIS 6.0 に Web サービスを展開し、アプリケーション プールを使用して、15 ワーカーの Web ガーデンを使用しました。
Global.asax でヘルパー クラスを Private Shared 変数として宣言し、次のように遅延読み込み Shared ReadOnly プロパティを追加しました。
Private Shared _helper As MyHelperClass
Public Shared ReadOnly Property Helper() As MyHelperClass
Get
If _helper Is Nothing Then
_helper = New MyHelperClass()
End If
Return _helper
End Get
End Property
のコンストラクターにログ記録コードがありMyHelperClass()
、同じスレッドであっても、リクエストごとにコンストラクターが実行されていることが示されます。ASP.NET のいくつかの重要な詳細が欠けているだけだと思いますが、MSDN はあまり役に立ちませんでした。
Application("Helper")
と の両方を使用して同様のことを試みましCache("Helper")
たが、各リクエストでコンストラクターが実行されるのを見ました。