1

VaryByParam に基づいて値をキャッシュするために、outputcache ページ ディレクティブを使用しています。ユーザーがページにアクセスするのを待つ代わりに、Web アプリケーションが一連の共通パラメーターに対して起動するときにキャッシュを事前設定する方法はありますか? それとも、キャッシュしたいすべてのページにヒットするスクリプトを書くだけでよいのでしょうか? 理想的には、global.asax application_start のどこかでサーバー側で実行できますか?

4

3 に答える 3

2

明らかに、あなたは今ソリューションに熱心ですが、ASP.NET 4 で予定されているものを見てみましょう。2 つの新しい機能が追加されているので、きっと役に立ちます。

1 つ目は、ASP.NET アプリの "ウォームアップ" ロジックを指定する機能です。これを web.config で構成し、オプションで IProcessHostPreloadClient を実装するコードを実行するように指示します。詳細については、http ://weblogs.asp.net/scottgu/archive/2009/09/15/auto-start-asp-net-applications-vs-2010-and-net-4-0-series.aspx を参照してください。

2 つ目は、出力キャッシュ用の適切なプロバイダー モデルを取得できることです。これまでは、ワーカー プロセスでのキャッシュという 1 つのオプションしかありませんでした。したがって、リサイクルが発生するたびに、キャッシュが失われます (もちろん、メモリの制約によって制限されます)。ASP.NET 4 では、ディスク ベースのキャッシュもそのまま使用できます。詳細はこちらをご覧ください: http://www.asp.net/learn/whitepapers/aspnet40/#_TOC1_2

于 2009-10-07T21:05:02.207 に答える
1

過去にウォームアップスクリプトを使用しました

http://programmerramblings.blogspot.com/2008/09/aspnet-site-warmup.html

このような解決策は、基本的にこれまでのページを「ping」します。この「ping」により、キャッシュがアクティブになります。また、ユーザーがコールド Web サイトにアクセスするのを防ぐこともできるため、ユーザーがアクセスするまでにページが完全にジッターされます。

編集:次のソリューションの匂いについてどう感じるかはまだわかりませんが、アプリケーションの開始時に各ページへの Web リクエストを送信するのはどうですか?

string[] cachedPages = new string[] { "http://...", "http://...", ...};

foreach (var url in cachePages) {
    var request = WebRequest.Create(url);
    request.BeginGetResponse(null, null);
}
于 2009-10-07T20:06:36.207 に答える
-1

誰かが実際にリクエストする前に、なぜキャッシュしたいのでしょうか? それもリソースを消費しませんか?

あなたが言っているように実際にページを動的にキャッシュできるかどうかはわかりませんが、Global.asax ファイルのキャッシュにオブジェクトを追加できます。

void Application_Start(object sender, EventArgs e) 
{

}
于 2009-10-07T20:06:37.553 に答える