1

ASP.NETアプリケーションに取り組んでおり、いくつかの参照データをキャッシュしています。キャッシュを作成するコードは、global.asaxのapplication_startイベントで呼び出されます。私の問題は、application_startイベントが複数回呼び出され、アプリケーションへのアクセスが遅くなることです。問題をテストするために、アプリケーションを再インストールしました。application_startイベントは、アプリケーションへの最初のアクセス時に発生し(予想どおり)、変更を加えなかったにもかかわらず、約1時間後に発生しました。アプリケーションのbinファイルでファイルシステムを変更しておらず、アプリケーションプールがデフォルトのリサイクル設定(1740分)に設定されているため、イベントが呼び出される理由がわかりません。

ありがとう

4

2 に答える 2

4

アイドルタイムアウト設定を確認します(デフォルトは20分)。サイトが20分間リクエストを処理しない場合、ワーカープロセスはシャットダウンされるため、その後アプリを実行すると、別のアプリ開始イベントが発生します。

于 2011-07-14T18:06:22.763 に答える
1

Global.asax.csのApplication_Endメソッドで再起動の理由をログに記録できます。私はこのコードを使用しています:

protected void Application_End(object sender, EventArgs e)
{
  HttpRuntime runtime = (HttpRuntime)typeof(System.Web.HttpRuntime).InvokeMember("_theRuntime", BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.GetField, null, null, null);

  string shutDownMessage = "";

  if (runtime != null)
  {
    shutDownMessage = Environment.NewLine + "Shutdown: " +
                      (string)runtime.GetType().InvokeMember("_shutDownMessage", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField, null, runtime, null) + 
                      Environment.NewLine + "Stack: " + Environment.NewLine +
                      (string)runtime.GetType().InvokeMember("_shutDownStack", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField, null, runtime, null);
  }
}
于 2011-07-14T18:08:00.720 に答える