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