在ASP.NET中缓存用户控件?

时间:2009-02-20 09:15:37

标签: c# asp.net caching user-controls asp.net-2.0

我在我的应用程序“header.ascx”中创建了一个用户控件,我将一个selectedMenu属性设置为此控件,控件在该控件上选择指定的selectedMenu值。假设,我已通过值“home”或“搜索”,然后它将选择(突出显示)搜索菜单。

我想缓存此控件,当selectedMenu属性的值发生更改时,只刷新缓存,否则它应该从缓存中获取控件?

是否可以在asp.net中缓存用户控件?我正在使用ASP.NET 2.0(C#)

4 个答案:

答案 0 :(得分:6)

ASP.NET中的用户控件缓存称为fragment caching。这是通过在页面顶部添加一个OutputCache指令来完成的:

 

您无法通过在控件上设置属性来更改缓存,因为如果在缓存中找到控件,则实际上不会创建控件。如果您尝试访问缓存后面的代码中的控件,它将为null。

判断是否应该缓存控件的条件是否可以通过查看当前请求来确定?如果是,则可以使用输出缓存指令的varybycustom属性(http://msdn.microsoft.com/en-us/library/system.web.ui.partialcachingattribute.varybycustom.aspx)。你可以把你想要的任何字符串作为参数,然后在评估缓存时,将调用GetVaryByCustomString() method from Global.asxa,你可以设置是否应该缓存控件的逻辑。

答案 1 :(得分:5)

当然可以!它被称为“片段缓存”。这是指向Quickstarts pageMS Knowledge base的链接。此外,Google

答案 2 :(得分:1)

我认为缓存控件本身并不是一个好主意:

  • 第一次创建控件时,它会引用其父页面等。
  • 从缓存中检索控件时,这些引用不再存在。

我认为更好的方法是缓存控件正在使用的数据。 ASP.NET在页面生命周期中创建了很多控件,缓存这个控件实际上并没有改进任何东西。

最后一个愚蠢的问题:这个控制是否成为瓶颈?你真的需要缓存吗?

答案 3 :(得分:0)

总结

使用VaryByCustom,意味着

1-再次构建控件。
2-在缓存中有多个版本的控件。这将在自定义条件符合时使用。

如果控件需要花费大量时间来构建,并且我们拥有有限数量的缓存版本以免浪费内存,并且应用程序将需要访问控件属性(当它被缓存“或null”)时,这才有用。 。

自定义条件取决于控件属性本身并不好。我无法访问它,它是null。

例如我想写类似的东西 if(国家/地区列表中的默认选定值不是美国) 然后重建和缓存(给它一个不同的字符串)

否则不要

当其他对象试图访问contries列表时,它将检查null,并将countries下拉列表设置为USA。

数据cahing将完成工作。这是唯一的方法。

谁同意?

感谢您的时间