在asp.net中缓存服务器端用户控件

时间:2010-09-08 17:30:54

标签: asp.net user-controls caching

我的asp.net应用程序大量使用用户控件并且负载很高;我担心的是,为每个请求加载用户控件(Page.LoadControl(controlPath))充其量是次优的。我想在HttpRuntime中缓存一个加载用户控件的实例,但我不知道当多个连接(线程)试图从缓存中获取它并修改属性时它会如何表现 - 我想麻烦在那里等待。 有没有优化用户控制加载的好方法?

同样,我正在谈论缓存用户控件,而不是它的html输出(它没有任何意义缓存,因为它的[html输出]每次使用时都会有所不同)

谢谢!

1 个答案:

答案 0 :(得分:1)

不要缓存用户控件或从WebControl继承的任何内容。

原因是它包含对实例化它的Page实例的引用。通过缓存控件,您可以有效地缓存Page 和整个控制子树。当你说在那里等待有麻烦时,你是对的!

远远好于缓存用户控件所需的数据,创建新的用户控件并使用数据对其进行初始化。

其他一些优化建议:

  • 如果您每页仅使用一个或两个控件,而不是动态加载它们,只需将它们声明为页面的一部分,并将其可见性最初设置为false,然后在需要时将其设置为true。

  • 如果用户控件对你来说实在太慢,你可以尝试将其重写为WebControl并在代码中设置布局。我不确定额外的工作是否值得在那里获得任何优化。

在你知道这是一个问题之前,我不会预先优化任何东西。您是否真的遇到LoadControl()的性能问题?