如何从缓存中快速获取数据

做项目的时候 需要一些设置数据
例如: 部门 人员 客户 行业  等等 我一般喜欢将这些数据 缓存到客户端
一般使用Dataset 缓存数据
当缓存数据比较大的时候 (6000条以上)
我一般是使用DataView 的   rowfilter 根据条件过滤缓存数据 获取合适的条目

数据量大的时候 发现速度比较慢(以前没有注意到)

经过几次试验  解决办法如下:

1. 使用DataTable.Select() 方法 比用DataView 的 rowfilter 要快一些

2. 使用HashTable 保存数据 (这个性能非常快 适合键值对形式的缓存数据)

   using System.Collections;
 
   Hashtable hst = new Hashtable();
   hst.Add("a", "a01");
   hst.Add("b", "b01");

   //确定键值a是否存在
   bool isExist = hst.Contains("a");
   或者
   bool isExist = hst.ContainsKey("a");
   
  注解: hst.Contains 和 hst.ContainsKey 好像是一个意思 (我觉得)

3. 使用泛型字典
   
    using System.Collections.Generic;

     
      SortedDictionary<string, string> test = new SortedDictionary<string, string>();
      test.Add("a", "a01");
      test.Add("b", "b01");
      //确定键值a是否存在

      bool isExist = test.Keys.Contains<string>("a");

     使用排序字典是最快的 也可以使用普通的字典 Dictionary

4. 如果 是vs2008以上的版本  可以使用Linq 区分泛型实体
   个人觉得 linq 在性能方面 可能不是太高(没有实际测试 看过网上别人的测试结论是比较慢)
   http://topic.csdn.net/u/20090810/15/26ce5147-e1fc-4ded-808f-bb5b4a294a02.html

总结一下:

<1> 最快的是泛型排序字典  因为它的类型是明确的  不用装箱 拆箱操作
<2> 第二 是HashTable  也比较快  不过现在一般都推荐使用第一种
<3> 使用DataTable.Select() 适用于用Dataset缓存数据的情况
<4> 使用Dataview 的 rowfilter 适用于用Dataset缓存数据的情况(数据量小的情况下 适用)

  如果数据量大 我们可以定义一个类 里面有多个属性 (例如:类 CMedia)
    Dictionary<string, CMedia)> test = new Dictionary<string, CMedia)>();

   需要定位缓存数据的时候 使用test.Keys.Contains<string>("a"); 定位
   然后 就找到了作为值的类
 

posted @ 2011-02-23 17:24  郑文亮  阅读(3338)  评论(2编辑  收藏  举报