gpt4 book ai didi

asp.net - 以编程方式控制输出缓存-根据参数值禁用或启用缓存

转载 作者:行者123 更新时间:2023-12-03 12:06:46 26 4
gpt4 key购买 nike

我们有一个相当标准的电子商务场景,其中包含类别内产品的分页列表。不管是好是坏,大约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 - 以编程方式控制输出缓存-根据参数值禁用或启用缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1043112/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com