3

問題: ASP.NET Web サイトを持っていますが、自分のコードが正しく OutputCached されているとは思えません。IIS7 パフォーマンス カウンターを使用して、1 秒あたりのヒットまたはミスを表示しています。


シンプルな ASP.NET MVC Web サイトがあります。組み込みの ASP.NET Output Cache マジックを使用しています。

ここにいくつかのサンプルコードがあります:-

[AcceptVerbs(HttpVerbs.Get)]
[ApiAuthorize]  // <-- this checks the querystring for a "key=1234". 
                // Doesn't find it, then it throws a 401 NOT AUTH exception.
[OutputCache(CacheProfile = "HomeController_Foo")]
public ActionResult Foo(string name, byte? alpha, byte? beta)
{
}

したがって、これは、各 URL クエリが次のようになることを意味します:-

ここで、設定ファイルを参照する OutputCache を取得した方法に注目してください。ここにあります...

<caching>
    <outputCacheSettings>
        <outputCacheProfiles>
            <add name="HomeController_Foo" duration="3600" varyByParam="key;name;alpha;beta"/>
        </outputCacheProfiles>
    </outputCacheSettings>
</caching>

難しいことは何もありません...

ここにキッカーがあります!IIS7 パフォーマンス カウンターを使用してこれが発生していることを確認すると、1 秒あたりの出力キャッシュ ミス数が 1 秒あたりの要求の 100% であることがわかります。出力キャッシュ ヒットは 0/秒です。

サードパーティの Web 負荷ストレス テスト プログラムを使用して、サイトにクエリを実行しています。さて、ソースデータは何ですか?名前のリスト。プログラムはすべての名前をループし続け、最初に戻り、すすぎを繰り返します。したがって、同じクエリ文字列を少なくとも 1 回呼び出すことは避けられません。IIS ログ ファイルは、これを確認します。

アルファ版またはベータ版のデータは渡しません。

これは私がヒットしている私のクエリ文字列です....

...「hello+world」をデータ ソース ファイルの名前に置き換え続け、IIS ログでこれを確認します。

だから..私は間違ったパフォーマンスカウンターを見ていますか? 出力キャッシュされているかどうかを確認する他のトリックはありますか? コードは非常に高速であるため、キャッシュされた結果かどうかを判断するのは困難です。

4

2 に答える 2

7

おそらく遅すぎますが、他の人を助けるために: 応答ヘッダーに Cookie がある場合、それはキャッシュされません。outputcache (http) モジュールには、応答がキャッシュされていることを確認するための多くのサイレント チェックがあります。リフレクションを通してそれを調べると、キャッシュに入れるのに失敗する可能性があります。

于 2012-03-24T16:23:00.817 に答える
1

firebug などのツールを使用して、リクエストからの応答を確認します。200 または 304 によって、キャッシュ応答が使用されたか (304)、または正常な応答が送信されたか (200) を知ることができます。

于 2009-10-04T12:08:11.377 に答える