ASP.NET和输出缓存 - 如何查看它是否正常工作?

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日志确认了这一点.

那么..我在看错了性能指标吗?有没有其他技巧可以看出它是否正在获得输出缓存?代码非常快,因此很难判断这是否是缓存结果.

Fra*_*eck 7

可能为时已晚,但要帮助其他人:如果您的响应标头中有cookie,则会阻止其被缓存.outputcache(http)模块有很多静默检查,以确保响应可以被缓存.通过反思来调查它可能会让任何候选人都无法放入缓存.