私は共通のヘルパークラスを共有するいくつかのASP.NET Webサービスを持っており、サーバーあたりのインスタンスをインスタンス化する必要があります。これはデータの単純な変換に使用されますが、起動時にweb.configファイルなどからロードする時間があります。ヘルパークラスは100%スレッドセーフです。ユーティリティコールの単純なライブラリと考えることができます。私はすべてのメソッドをクラスで共有するつもりだが、私はweb.configから初期設定をロードしたい。 IIS 6.0にWebサービスを展開し、15人のWebガーデンを持つアプリケーションプールを使用しました。要求ごとにGlobal.asaxの共有/静的変数が分離されていますか?
私は、Global.asaxのプライベート共有変数としてヘルパークラスを宣言し、このような怠惰な負荷共有の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")
の両方を使って同様のことを試みましたが、依然として各リクエストでコンストラクタが実行されていました。
高価なオブジェクトがすべての要求に対して再作成することは非常に悪い考えです。トラフィックが少ないサイトでも、サーバーに負荷がかかると動作します。 – JRoppert