我的asp.net网站使用服务器控制通过缓存的页面的部分,以提高性能。缓存,在asp.net共享服务器控件出现
大多数情况下它工作的很好,但是偶尔有一个服务器控件会在页面上多次出现 - 有时是两次,有时甚至是三次 - 即使控件在页面上只引用一次。
当它发生,它看起来与在我们的办公室多台电脑相同的 - 所以它不是一个浏览器的问题。
如果我们重新上传了违规复制控制.ascx文件,它修复它。我的猜测是,控制器的服务器端缓存出了问题,重新上传ascx文件会清除服务器缓存,以便在下次请求页面时重新创建服务器缓存。
我的问题是:
- 有其他人遇到此?
- 有没有办法解决呢?是
在.ascx文件顶部的指令如下:
<%@ OutputCache Duration="86400" Shared="true" VaryByParam="none" %>
<%@ Control Language="VB" ClassName="Banner_LocalGuides" EnableViewState="false" %>
该控件注册的内容页面上像这样:
<%@ Register TagPrefix="tymControls" TagName="LocalGuides" Src="~/Banner-LocalGuides.ascx" %>
该标签随后在内容页面上使用,如下所示:
<tymControls:LocalGuides ID="LocalGuides" runat="server" />
有一件事我认为是,它可能是与应用程序池的回收周期在IIS与ASCX文件的OutputCache Duration属性比较的时间 - 但我可能是完全错误的。应用程序池回收时间目前为240分钟(14,400秒)。
在我们网站上设置更多信息:
- 运行在经典管道模式asp.net 4。
- IIS 7
- 在vb.net
- 使用母版页编码的,但的.ascx从内容页没有母版页
任何帮助非常赞赏引用。
请问为什么要缓存控件?数据是静态的吗? –
嗨,詹姆斯,我们在网站上有几箱数据出现在各种页面上。其中一些是从数据库动态生成的,所以我们将这些缓存起来以防止太多的命中到数据库。有一些只包含静态数据。目前,我们正在缓存动态和静态 - 我认为不要打扰静态缓存。动态的确实需要缓存,因为用于生成它的代码/数据库查询非常密集。 –
你是否考虑过缓存查询的结果而不是控件?只是一个想法... –