asp.Net   发布时间:2022-04-07  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了asp.net – 编程控制输出缓存 – 根据参数值禁用或启用缓存大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我们有一个相当标准的电子商务场景,分类中的产品分页列表。不管好坏还是差不多,80%的访客从未浏览过第一页,根据类别,可能会再有5-10页的结果比较少见。 (是的,我们会优化第一页显示的内容并进行良好的搜索 – 但这是一个不同的讨论)

我们无法缓存每一页结果,因为我们受到内存的限制,但缓存的好处只是每个类别的第一页结果将是巨大的。

我知道我可以使用对象缓存来做类似的事情来存储有问题的数据集,但是这可能是使用输出缓存,也许通过使用response.Cache对象?

在页面生命周期中哪里可以做到这一点?预渲染?

很简单,URL就像“/ ProductList?Category = something& Page = 1”,我想要的逻辑类似(伪代码):

If paramater "Page" equals 1
   Use output caching: vary by param = "categoryName; page"
else
   Don't use caching at all,just render the page from scratch.

我们在IIS 6 / win2003上使用ASP.NET 2.0。

解决方法

而不是使用OutputCache指令,您可以通过编程方式执行相同的操作,如下所示:
if (yourArbitraryCondition) {
  OutputCacheParameters outputCacheSetTings = new OutputCacheParameters();
  outputCacheSetTings.Duration = 60;
  InitOutputCache(outputCacheSetTings);
}

从OnInit这样做可以正常工作。显然,您可以通过设置OutputCacheParameter上的各种属性来调整缓存行为,该属性与指令具有相同的旋钮(实际上,这是我们在使用指令时生成的)。

关键是你只是有条件地执行这个逻辑,而指令使它无条件。

更新:

作为替代方案,您可以使用上面代码构建的低级缓存API。例如

httpCachePolicy cache = Response.Cache;
cache.SetCacheability(httpCacheability.Public);
cache.SetExpires(Context.timestamp.AddSeconds(60));
cache.VaryByParams["categoryName"] = true;

基本上,这是做同样事情的另一种方式,而不使用任何被标记为“不应该被调用”的API。最后,任何一种方式都可以工作,所以请选择。

大佬总结

以上是大佬教程为你收集整理的asp.net – 编程控制输出缓存 – 根据参数值禁用或启用缓存全部内容,希望文章能够帮你解决asp.net – 编程控制输出缓存 – 根据参数值禁用或启用缓存所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。