问题:我有一个 ASP.NET 网站,但我不相信我的代码正确地得到了 OutputCached。我正在使用 IIS7 性能计数器向我显示命中或未命中一秒。
我有一个简单的 ASP.NET MVC 网站。我正在使用内置的 ASP.NET 输出缓存魔法。
这是一些示例代码:-
[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 性能计数器确认发生这种情况时,它表示输出缓存未命中/秒是我每秒发出的请求的 100%。输出缓存命中率为 0/秒。
我正在使用第 3 方网络负载压力测试程序来向我的网站发送查询。现在,源数据是什么?名单。程序不断循环遍历所有名称,然后返回开始,重复冲洗。因此,必须至少调用一次相同的查询字符串。IIS 日志文件证实了这一点。
我没有为 alpha 或 beta 传递任何数据。
这是我正在点击的查询字符串....
...我一直用数据源文件中的名称替换“hello+world”,IIS 日志证实了这一点。
所以..我在看错误的性能计数器吗?是否有任何其他技巧可以查看它是否正在输出缓存?代码非常快,因此很难判断这是否是缓存结果。