c#企业库缓存关于CacheManager的性能

时间:2012-01-12 10:37:39

标签: c# caching enterprise-library

在性能视图中使用缓存库的最佳方法是什么。我的数据库表中有很多数据要缓存。

假设我有3个名为。

的表
  1. AssignmentHead
  2. AssignmentRow
  3. 产品
  4. 今天我把这些桌子作为休闲存放:

    private CacheManager _manager = _manager = CacheFactory.GetCacheManager();
    

    我有一个CacheManger并且我存储了这样的数据。

    _manager.add("Heads",ListofAssignmentHeads);
    _manager.add("Rows",ListofAssigmmentRows);
    _manager.add("Items",ListOfItems);
    

    在检索像Heads这样的数据时,我会这样做:

    _manager.GetData("Heads");
    

    然后我得到一个头列表并使用linq来查询我想要的内容。但这是最好的方法吗?或者最好为每个表设置3个CacheManager并插入主键然后插入对象。

    _headManager.add("1",HeadObject);
    

    我真的需要你对这些建议。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

就个人而言,所有事情几乎相同,我会以运行时需要的格式缓存数据。这样,您就可以直接在所需的表示中获取所需的信息。在您的示例中,将使用主键作为缓存键的多个CacheManagers。

看起来您已经有了返回列表的方法,并且您正在缓存列表。我宁愿在加载数据时迭代列表一次,然后按键执行查找,而不是在每次调用时迭代列表。如果您的列表很大,如果您必须搜索每个请求的列表,您可能会看到性能损失,因为在没有散列冲突的缓存中查找列表中的元素是O(N)与O(1)。

当然,如果您想支持动态列表,那么您可能更愿意根据需要将列表添加到单个CacheManager,因为创建动态CacheManager是一项工作。