【问题标题】:Caching ASP.NET User Controls on the Client在客户端缓存 ASP.NET 用户控件
【发布时间】:2010-07-02 21:24:00
【问题描述】:

我想知道是否可以在客户端缓存一个 ASP.NET UserControl。

我有一个查询数据库并呈现 GridView 的用户控件。它必须在客户端上,因为查询结果因用户而异(由 User.Identity.Name 决定)。 该页面用于 Intranet。

任何帮助将不胜感激!

提前致谢,

PS:用户控件默认缓存在哪里?服务器,代理?

【问题讨论】:

  • 如果启用缓存,默认缓存在服务器内存中。
  • 我知道它不在客户端,但将 gridview 数据源添加到会话状态是一个选项?
  • @johnc:您可以将断开连接的 DTO(如 DataTables)添加到会话状态。注意不要添加像 DataReaders 这样的“已连接”对象,否则您可能会保持打开的数据库连接并使连接池过载。
  • 是的,做不到。客户端不知道用户控件是什么。只需在用户控件上使用智能部分缓存(varybycustom - user.identity.name)。
  • @RPM1984:是的,谢谢!我就是这么做的!

标签: c# asp.net user-controls


【解决方案1】:

代理服务器和客户端只能缓存静态数据。动态数据必须始终由 IIS 提供服务,但您可以通过将数据存储在内存缓存中而不是为每个请求查询数据库来提高效率。

对于 ASP.NET,术语“缓存”通常是指将数据存储在服务器的内存中。您可以使用诸如 User.Identity.Name 之类的键值向不同的用户提供不同的数据。如果要在服务器上缓存用户的结果,可以使用 Cache.Add 将 DataSet(或其他 DTO)添加到 Cache 字典中,使用用户的 ID 作为键。如果有问题的数据不经常更改,这可能是提供用户特定数据的有效方式。如果数据确实经常更改,您可以使用 Cache 对象的回调机制在(例如)文件更改时使缓存项过期。

IIS/ASP.NET 还支持基于查询字符串的页面缓存和页面的部分缓存。这些由 .aspx 页面中的页面指令控制,而每个站点由 web.config 控制。

【讨论】:

    【解决方案2】:

    用户控件始终缓存在网络服务器上,而不是在代理服务器或网络浏览器中。

    不过,为了满足您的意图,您可以根据 OutputCache 指令的 VaryBy 属性呈现不同的缓存结果。其中包括:

    • VaryByParam
    • VaryByControl
    • 按自定义变化

    【讨论】:

    • 谢谢!我使用了 VaryByCustom 指令来指定缓存应该只对当前用户可用。
    猜你喜欢
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多