【问题标题】:How to cache a List<T> in a ASP.NET Web Application如何在 ASP.NET Web 应用程序中缓存 List<T>
【发布时间】:2012-06-12 20:37:53
【问题描述】:

我有一个 ASP.NET Web 表单 应用程序。

我必须通过DataSource 使用我的Repository 层提供的List&lt;T&gt; 来通过GridView 控件显示搜索结果。

由于每次用户更改搜索过滤器时我都使用 autopostback 技术,为了减少对数据库的访问量,我想将初始 List&lt;T&gt; 结果集存储在缓存以便在那里执行进一步的过滤。

我发现了很多关于在 ASP.NET 中进行缓存的文章,但它们都包含比我更复杂的范围。有谁知道快速而清晰的方法吗?

【问题讨论】:

  • 如果你想修改列表,那是行不通的。
  • 你检查过 ASP.NET 的内置缓存吗?

标签: asp.net list caching


【解决方案1】:

我猜每个用户都有自己独特的结果集,因此您可以简单地将 List&lt;&gt; 存储在会话中。

Session[SessionKeys.MyResultsetKey] = myList;

【讨论】:

  • 目前列表最多可以提供 280.000 个元素。存放在session里是不是太多了?
  • 由于我不知道您在列表中存储了什么或为什么,因此很难为您提供有关如何检索或存储数据集的建议。您询问了有关如何缓存列表的建议,并且您有两个非常好的答案,会话或缓存。如果您在整体设计方面需要进一步帮助,我建议您提出更详细的不同问题。
  • 谢谢,是的,你是对的。该列表由具有 1 个 int 和 6 个字符串的 T 个对象组成。能否请您告诉我使用 Cache 和 Session 的主要区别?
  • 缓存是全局的 - 所有会话都可以访问相同的数据。此空间主要用于应用程序范围的设置或数据集,例如状态列表。会话对当前用户是私有的,用于特定于每个用户的设置或数据集,例如购物车。
【解决方案2】:

要将其存储在缓存中,您可以这样做

Cache["CacheKeyName"] = myList;

要检查回发时该密钥是否已存在,您可以这样做

if(!IsPostBack)
{
 if(Cache["CacheKeyName"] == null)
 {
  Cache["CacheKeyName"] = myList;
 }
}

【讨论】:

    猜你喜欢
    • 2012-06-02
    • 2018-07-05
    • 2010-12-04
    • 1970-01-01
    • 2013-10-31
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 2019-02-13
    相关资源
    最近更新 更多