Pur*_*ome 3 asp.net performance outputcache performancecounter
问题:我有一个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)
{
}
Run Code Online (Sandbox Code Playgroud)
所以这意味着每个网址查询可以如下所示: -
现在,请注意我是如何让OutputCache引用配置文件的?这里是...
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<add name="HomeController_Foo" duration="3600" varyByParam="key;name;alpha;beta"/>
</outputCacheProfiles>
</outputCacheSettings>
</caching>
Run Code Online (Sandbox Code Playgroud)
没什么太难的......
所以这里是踢球者!当我通过使用IIS7性能计数器确认发生这种情况时,它表示输出缓存未命中/秒是我正在进行的请求的100%.输出缓存命中数为0 /秒.
我正在使用第三方Web负载压力测试程序来查询我的网站.现在,源数据是什么?名单.程序循环遍历所有名称,然后返回到开始,冲洗重复.因此,至少调用一次相同的查询字符串是有限的.IIS日志文件确认了这一点.
我没有传递alpha或beta的任何数据.
这是我的查询字符串我正在打....
...我继续使用数据源文件中的名称替换'hello + world',并且IIS日志确认了这一点.
那么..我在看错了性能指标吗?有没有其他技巧可以看出它是否正在获得输出缓存?代码非常快,因此很难判断这是否是缓存结果.
可能为时已晚,但要帮助其他人:如果您的响应标头中有cookie,则会阻止其被缓存.outputcache(http)模块有很多静默检查,以确保响应可以被缓存.通过反思来调查它可能会让任何候选人都无法放入缓存.