zoukankan      html  css  js  c++  java
  • 如何从缓存中快速获取数据

    做项目的时候 需要一些设置数据
    例如: 部门 人员 客户 行业  等等 我一般喜欢将这些数据 缓存到客户端
    一般使用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"); 定位
       然后 就找到了作为值的类
     

  • 相关阅读:
    vmware下玩ubuntu总结
    .Net Json 字典序列化
    Flex Air TitleWindow 拖动范围控制
    TimesTen 问题荟萃
    TimesTen 时间戳(timestamp)用法
    批量数据插入 (.Net, ODBC)
    腾讯 360浏览器 调用js问题
    [转]Android项目源码混淆问题解决方法
    Intent调用大全
    View实现涂鸦、撤销以及重做功能【转】
  • 原文地址:https://www.cnblogs.com/zhwl/p/1962507.html
Copyright © 2011-2022 走看看