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

Posted

技术标签:

【中文标题】ASP.NET 和输出缓存 - 如何查看它是不是正常工作?【英文标题】:ASP.NET and the Output Cache - how can see if it's working?ASP.NET 和输出缓存 - 如何查看它是否正常工作? 【发布时间】:2009-10-04 11:50:25 【问题描述】:

问题:我有一个 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 传递任何数据。

这是我正在点击的查询字符串....

http://www.mydomain.com/Foo?name=hello+word&key=1234

...我一直用数据源文件中的名称替换“hello+world”,IIS 日志证实了这一点。

那么 .. 我看错了性能计数器吗?是否有任何其他技巧可以查看它是否正在输出缓存?代码非常快,所以很难判断这是否是缓存结果。

【问题讨论】:

【参考方案1】:

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

【讨论】:

不错的收获,为我节省了一些时间。谢谢【参考方案2】:

使用 firebug 之类的工具查看请求的响应。您将能够通过 200 或 304 判断是否使用了缓存响应 (304) 或是否发送了成功的响应 (200)。

【讨论】:

我知道我可以使用 firebug,但我认为我提到的性能计数器可能适用并报告命中/未命中?是不是?

以上是关于ASP.NET 和输出缓存 - 如何查看它是不是正常工作?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 输出缓存在 IIS7.5 上不起作用

如何缓存将图像返回到asp.net mvc中的视图的操作方法的输出?

ASP.NET MVC 视图和控制器输出缓存

如何确定 ASP.Net 缓存的总大小?

如何测量 .NET 内存缓存 4.0 的当前大小?

如何清除文本框的缓存?? asp.net