1

WCF Data Services で出力キャッシュを使用したいと考えています。キャッシュをサポートするために特別に組み込まれたものは何もありませんが、通常の ASP.NET メカニズムを使用して要求のキャッシュ可能性をフックして設定できる OnStartProcessingRequest メソッドがあります。

しかし、大量の応答がキャッシュされると、メモリが過剰に消費されてワーカー プロセスがリサイクルされることが心配です。ASP.NET 出力キャッシュの上限を指定して、この上限を超えた場合にキャッシュ内のアイテムが破棄されるようにする方法はありますか?

キャッシュ構成設定を見てきましたが、ドキュメントから、メモリ関連の属性を持たない別のoutputCacheSettingsがあるため、これは Cache オブジェクトを介した明示的なキャッシュ用であるという印象を受けます。

以下は、 Scott Hanselman の投稿からのコード スニペットで、リクエストのキャッシュ可能性をどのように設定しているかを示しています。

protected override void OnStartProcessingRequest(ProcessRequestArgs args)
{
    base.OnStartProcessingRequest(args);
    //Cache for a minute based on querystring
    HttpContext context = HttpContext.Current;
    HttpCachePolicy c = HttpContext.Current.Response.Cache;
    c.SetCacheability(HttpCacheability.ServerAndPrivate);
    c.SetExpires(HttpContext.Current.Timestamp.AddSeconds(60));
    c.VaryByHeaders["Accept"] = true;
    c.VaryByHeaders["Accept-Charset"] = true;
    c.VaryByHeaders["Accept-Encoding"] = true;
    c.VaryByParams["*"] = true;
}
4

1 に答える 1

2

ああ!私は今、ばかげていると感じています... IIS の構成でこの制限を設定できるようです。これは、IIS が最初に ASP.NET に出力キャッシュ サービスを提供していると思われるため、理にかなっています。

また、追加のボーナスとして、IIS はすでにこれに対していくつかの適切な設定にデフォルト設定されているようです。

キャッシュされた応答の最大サイズ (バイト単位)ユーザー モード キャッシュとカーネル モード キャッシュの両方について、キャッシュされた応答の最大サイズを指定します。デフォルト値は 262144 バイトです。このフィールドはサーバー レベルでのみ有効です。他のすべてのレベルでは読み取り専用です。

キャッシュ サイズの制限 (MB) ユーザー モードとカーネル モードの両方のキャッシュのサイズ制限を構成します。サイズ (MB 単位) または 0 を入力できます。0 を入力すると、IIS は使用可能な物理メモリまたは仮想メモリのどちらか少ない方の半分を使用します。このフィールドはサーバー レベルでのみ有効です。他のすべてのレベルでは読み取り専用です。

于 2010-05-17T22:33:39.243 に答える