0

シナリオ:

  • ASP.NET 3.5 WebForms ベースの Web サイトを持っています。
  • Foo.aspxBar.aspxおよびbaz.html(jQuery テンプレート)が含まれています。
  • 見られる典型的なトラフィックはFoo.aspx、(N 回)、Bar.aspx(N 回)、およびbaz.html(10*N 回) です。
  • ASP.NET ワーカー プロセス ( aspnet_wp.exe) は、たとえば 2 時間ごとにリサイクルされます。
  • OldFooService.Init()の最初の要求に対してのみ実行する必要がある古い API ( ) が存在しますFoo.aspxOldFooService.Init()最初のフローではデータ ストアを初期化しますCacheが、後続のフローでは空白を起動します。

質問:

私は現在 B (下記参照) を行っています。これは、へのトラフィックが1 回目Foo.aspxよりも低く、baz.htmlブランクOldFooService.Init()が発生するためです。

Cを使用する必要がありますか?への書き込みにApplication_Stateはロック ( MSDN ) が必要であり、使用できることが保証されていないため、努力する価値があるかどうかはわかりません。それとももっと良いDがありますか?

オプション:

A)Application_StartGlobal.asax

B)一度Page_LoadFoo.aspx( をチェックしてNot IsPostBack)

C) オプション B + のフラグを使用して、 のApplicationStateリサイクルごとに 1 回実行しaspnet_wp.exeます。

4

2 に答える 2

4

ここでの正解は (A)、Global.asax を使用します。後続の GET リクエストが同じコードを実行するため、B は機能しません。Cは機能しますが、罪のように醜いです。

従来の init 関数で必要なものに応じて、Global.asax で Application_Start または Application_Init を処理することをお勧めします。

于 2012-07-11T13:31:50.523 に答える
1

OldFooService.Init() が初期化される前にリクエストが同時に入ってきた場合に余分に数回呼び出されても問題ない場合は、C を使用します。リサイクルごとに 1 回実行する必要がある場合は、静的クラスを使用します。いくつかの適切な読み取り/書き込みロックを使用します。

ちなみに、ワーカー プロセスは実際に 2 時間ごとにリサイクルされますか? それはかなり頻繁に思えます。

于 2012-07-11T13:47:38.670 に答える