我的asp.net应用程序大量使用用户控件并且负载很高;我担心的是,为每个请求加载用户控件(Page.LoadControl(controlPath))充其量是次优的。我想在HttpRuntime中缓存一个加载用户控件的实例,但我不知道当多个连接(线程)试图从缓存中获取它并修改属性时它会如何表现 - 我想麻烦在那里等待。 有没有优化用户控制加载的好方法?
同样,我正在谈论缓存用户控件,而不是它的html输出(它没有任何意义缓存,因为它的[html输出]每次使用时都会有所不同)
谢谢!
答案 0 :(得分:1)
不要缓存用户控件或从WebControl继承的任何内容。
原因是它包含对实例化它的Page实例的引用。通过缓存控件,您可以有效地缓存Page 和整个控制子树。当你说在那里等待有麻烦时,你是对的!
远远好于缓存用户控件所需的数据,创建新的用户控件并使用数据对其进行初始化。
其他一些优化建议:
如果您每页仅使用一个或两个控件,而不是动态加载它们,只需将它们声明为页面的一部分,并将其可见性最初设置为false,然后在需要时将其设置为true。
如果用户控件对你来说实在太慢,你可以尝试将其重写为WebControl并在代码中设置布局。我不确定额外的工作是否值得在那里获得任何优化。
在你知道这是一个问题之前,我不会预先优化任何东西。您是否真的遇到LoadControl()
的性能问题?