ASP.NET 重建缓存控件

3

我已经解决了大部分缓存问题,但还有一件事情。我有一个用户控件,我使用输出缓存来处理它。就像这样:

<%@ OutputCache Duration="1200" VaryByParam="none" %> 

然而,正如您所看到的,该控件每12分钟就会重新创建一次,因为生成它需要5至10秒钟。
现在,ASP.NET的默认行为是在用户进入页面时创建控件并将其缓存12分钟。然后,在另外5分钟后用户再次进入页面时,控件将被重新创建。
有没有一种方法可以强制ASP.NET在12分钟缓存过期后重新创建控件?无论下一个用户访问时是什么情况?
或者甚至有一个完美的解决方案:在11分50秒后在后台重新创建控件,然后在12分钟后用新的控件替换实际的控件?
感谢您的帮助!

1
这不是浪费吗?如果没有用户访问带有控件的页面,为什么要重新加载它? 无论如何,这个控件是做什么的?它上面有数据库调用吗? - eugeneK
是的,它调用了数据库,但是数据库通信被缓存机制缓存了。控制逻辑本身需要很长时间。而且我已经没有办法再减少这个逻辑了。 - Adam
2个回答

1
使用Windows计划任务每12分钟进入此页面,因为ASP.NET仅与触发器一起工作。 触发器可以是每12分钟请求其他页面的Ajax,也可以是下一个访问您网页的用户。

我考虑过这个问题,但我不确定这是在这种情况下唯一可能/最好的解决方案。 - Adam
@Adam,这个控件是干什么用的?也许你可以将其中一些部分移出控件并仅缓存所需的部分? - eugeneK
不幸的是,该控件创建了许多控件(标签、div等),并将其添加到控件内的其他控件中。而我无法缓存控件外的控件 - 因为使用Controls.Add()方法添加缓存HTML将导致异常。 - Adam
那么我看没有其他办法,要么使用我的建议,要么重新设计控件本身。 - eugeneK
我认为现在这是唯一的选择。 - Adam

0

我不确定,但是听起来你想让控件在用户查看页面时以异步方式间隔更新?

如果是这样,你需要使用Ajax。例如,Timer 控件允许在设置的时间间隔内异步更新 UpdatePanels。

顺便说一下,你示例中的持续时间实际上是20分钟。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接