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


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

  • 相关阅读:
    设计模式复习笔记08
    Docker Dockerfile 指令详解与实战案例
    Docker数据管理与挂载管理
    Docker简介与安装
    Xshell如何配置并远程连接Linux服务器详解
    如何VMware创建Linux虚拟机并设置虚拟机网络
    自动化运维工具Ansible之LNMP实践环境部署
    自动化运维工具Ansible之Roles角色详解
    自动化运维工具Ansible之Tests测验详解
    Ansible Jinja2 模板使用
  • 原文地址:https://www.cnblogs.com/zhwl/p/1962507.html
Copyright © 2020-2023  润新知