回到目录

字典对象Dictionary<K,V>我们经常会用到,而在大数据环境下,字典使用不当可能引起性能问题,严重的可能引起内在的溢出!

  • 字典的值建议为简单类型,反正使用Tuple<T>
  • 字典的键在查找时,时间复杂度为O(1),性能不会有任何问题,所以不要愿望它

下面代码是对500万的字典进行测试,首先赋值,然后取出一个随机机,性能在毫秒级

    static void Draw(){int count = 5000000;Console.WriteLine("test:{0} feeds", count);List<GoldCoinInfo> list = new List<GoldCoinInfo>();list.Add(new GoldCoinInfo { Id = 100, GoldValue = 5, LeftCount = count, TotalCount = count });var dic = new Dictionary<int, int>();int _index = 0;Stopwatch sw = new Stopwatch();sw.Restart();foreach (var gold in list){for (int j = 0; j < gold.LeftCount; j++){dic.Add(_index, gold.Id);_index++;}}sw.Stop();Console.WriteLine("step1:{0} ms", sw.ElapsedMilliseconds);sw.Restart();var prizeIndex2 = GenerateRandom(dic.Keys.Max(), 1).FirstOrDefault();Console.WriteLine("step3:{0} ms,value:{1}", sw.ElapsedMilliseconds, dic[prizeIndex2]);sw.Stop();}

测试结果

而如果value使用了tuple<t>类型,那性能就一落千丈了!

       var dic = new Dictionary<int, Tuple<int, int>>();int _index = 0;Stopwatch sw = new Stopwatch();sw.Restart();foreach (var gold in list){for (int j = 0; j < gold.LeftCount; j++){dic.Add(_index, new Tuple<int, int>(gold.Id, gold.GoldValue));_index++;}}

在取随机机时,我们有时使用NewId()这试,但这种开销依然很大,不建议大家使用,这种只适合在特定的场合用,如EF对IQueryable结果集动态随机数时,代码如下

   /// <summary>/// sql函数的扩展类/// </summary>public static class SqlFunctionExtensions{#region 功能方法/// <summary>/// 在linq to entity中使用SqlServer.NEWID函数/// </summary>public static Guid NewId(){return Guid.NewGuid();}#endregion#region 扩展方法/// <summary>/// 随机排序扩展方法/// </summary>/// <typeparam name="T"></typeparam>/// <param name="source"></param>/// <returns></returns>public static IQueryable<T> OrderByNewId<T>(this IEnumerable<T> source){return source.AsQueryable().OrderBy(d => NewId());}#endregion}

对技术的研究我们在继续,有时,模棱两可是不行的!

有时,应该较较真!

回到目录

基础才是重中之重~DictionaryK,V里V的设计决定的性能相关推荐

  1. 基础才是重中之重~再说面向接口的编程

    回到目录 之前在我的文章中有对接口进行过讲解,但感觉讲的还是不够清晰,不够利针见血,这次我把面向接口的编程里,自认为比较核心的两点说一下: 接口详细介绍请看我的这篇文章 基础才是重中之重~为什么C#有 ...

  2. 基础才是重中之重~通过人类的生活来学习Delegate

    一个人(people),在他60岁之后,就宣布进入晚年了,在这个期间要多注意身体,多体检. namespace NET基础才是重中之重{/// <summary>/// 人类/// < ...

  3. 基础才是重中之重~类是怎么执行的

    回到目录 对于一个程序员来说,有必要知道一个概念的同时也解它的执行过程,这样对于写出更好更安全的程序是有帮助的. 大牛们不是一天就成为大牛的,而是经过一步一步的实践,不断的知识的积累才成为大牛的,呵呵 ...

  4. 第二十二回  基础才是重中之重~ThreadStatic静态字段在每个线程里的唯一性

    static修饰符我们不会陌生,它代表静态,可以修饰你的类,方法,字段和属性等等,今天主要说一个为静态字段加ThreadStatic特性会给程序代来什么样的变化.静态字段static field,我更 ...

  5. 基础才是重中之重~方法override详解

    回到 目录 之所以写这篇文章,完全是因为这次代码审核,这次代码审核过程当中,出现了很多我认为基础知识不够扎实的问题,所以,打算把它们记录下来,共大家分享. 方法的override,即方法的覆写或者重写 ...

  6. 基础才是重中之重~何为原子化操作

    占占定义: 原子化操作,操作原子化,这在软件开发中经常被听到,那到底什么是操作原子化呢,其实从字面上不难理解,原子化就是一体化,整体化,原子化操作就是将多个操作组合在一起,要么这个组合一起发生,要么一 ...

  7. 基础才是重中之重~用好configSections让配置信息更规范

    对于小型项目来说,配置信息可以通过appSettings进行配置,而如果配置信息太多,appSettings显得有些乱,而且在开发人员调用时,也不够友好,节点名称很容易写错,这时,我们有几种解决方案 ...

  8. 基础才是重中之重~.net中的显式事务与隐式事务

    回到目录 .net中的事务可以分为显式的和稳式的,显式的就是说需要我们手动去指定事务的提交和回滚,而稳式的是.net帮助我们进行管理的,当你的事务代码段没有发生异常时,它会帮助我们进行提交,反之,进行 ...

  9. 基础才是重中之重~开发人员应用学会用throw

    回到目录 无论是.net还是java,在开发程序时都难免会用到throw关键字,对于初学者一般会认为它与try...catch捆绑在一起,这当然是错误的,事实上,throw的一个最重要的作用就是: 让 ...

最新文章

  1. python查询缺失值所在位置使用scipy_python – 使用缺失值计算scipy中的成对距离
  2. “神人”or“闲人”?你的未来由AI与大数据决定
  3. 以为精通Java 线程池,看到这些误区,还是年轻了...
  4. 面试官让我手写一个生产者消费者模式?
  5. TVideoGrabber的使用(简介)
  6. 在LINUX环境中,哪种文件系统存储更安全?
  7. 聚类算法K-Means, K-Medoids, GMM, Spectral clustering,Ncut
  8. Android textview 获取url,获取电话号码
  9. 工厂方法模式_1天1个设计模式——工厂方法模式
  10. SQL Server智能提示插件下载
  11. 在iMac上建立一个git仓库
  12. 【深入理解JVM笔记】什么是元数据?
  13. 【第十届“泰迪杯”数据挖掘挑战赛】C题:疫情背景下的周边游需求图谱分析 问题二方案及Python实现
  14. Rockchip CAN 总线
  15. 云里黑白第五回——联想Y430p系统迁移
  16. 机电和计算机专业怎么选,计算机专业怎么选城口_竟成学校
  17. ubuntu提示系统缺失字体:symbol、wingdings、wingdings2、wingdings3、webdings,WPS无法正确显示...
  18. HTML5之HTML+CSS3代码(一)
  19. 5 个免费在线 SQL 数据库环境,简直太方便了!
  20. 11选5c语言代码,11选5中“胆”存秘籍 三绝招助彩民有所斩获

热门文章

  1. 数据库软件安装和数据库创建的几种方法
  2. Open×××的Linux内核版,鬼魅的残缺 part I:The PROTOCOL
  3. Spring Batch_官网DEMO实现
  4. 问问题要量化,要具体
  5. Windows 2008 ×××与 CA
  6. 一元三次方程求解matlab_初中数学最全函数/方程【实际应用题】分类详解提升必学必练!...
  7. hmr webpack 不编译_一文搞懂 webpack HMR 原理
  8. 神经网络预测模型算法_MATLAB Elman神经网络的数据预测—电力负荷预测模型研究...
  9. RID枚举工具RidEnum
  10. Beaglebone Black开发板安装驱动