【问题标题】:Caching a server side user control in asp.net在 asp.net 中缓存服务器端用户控件
【发布时间】:2010-09-08 17:30:53
【问题描述】:

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

再次,我说的是缓存用户控件,而不是 html 输出(缓存没有意义,因为每次使用它时 [html 输出] 都会有所不同)

谢谢!

【问题讨论】:

    标签: asp.net user-controls caching


    【解决方案1】:

    永远不要缓存用户控件或任何从 WebControl 继承的东西。

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

    缓存用户控件所需的数据要好得多,创建一个新的用户控件并使用数据对其进行初始化。

    其他一些优化建议:

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

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

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

    【讨论】:

    • 我还没有遇到 LoadControl 的问题,我只是假设每次需要时从硬盘读取它对于从内存中获取它是次优的。但我想我必须处理它
    猜你喜欢
    • 1970-01-01
    • 2013-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 2014-12-02
    • 1970-01-01
    • 2011-05-04
    相关资源
    最近更新 更多