問題: 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 クエリが次のようになることを意味します:-
- http://www.mydomain.com/Foo?name=hello+word&key=1234
- http://www.mydomain.com/Foo?name=hello+word&alpha=1&key=1234
- http://www.mydomain.com/Foo?name=hello+word&alpha=1&beta=2&key=1234
ここで、設定ファイルを参照する 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 ログでこれを確認します。
だから..私は間違ったパフォーマンスカウンターを見ていますか? 出力キャッシュされているかどうかを確認する他のトリックはありますか? コードは非常に高速であるため、キャッシュされた結果かどうかを判断するのは困難です。