博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基础才是重中之重~Dictionary<K,V>里V的设计决定的性能
阅读量:5967 次
发布时间:2019-06-19

本文共 2372 字,大约阅读时间需要 7 分钟。

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

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

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

   static void Draw()        {            int count = 5000000;            Console.WriteLine("test:{0} feeds", count);            List
list = new List
(); list.Add(new GoldCoinInfo { Id = 100, GoldValue = 5, LeftCount = count, TotalCount = count }); var dic = new Dictionary
(); 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 _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
(gold.Id, gold.GoldValue)); _index++; } }

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

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

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

有时,应该较较真!

 

转载地址:http://aamax.baihongyu.com/

你可能感兴趣的文章
UVA 714 Copying Books
查看>>
常用的激活函数
查看>>
【Java学习】网络编程1
查看>>
sqlcmd
查看>>
Excel 已经检测到"XXX.xsl"是SYLK文件,但是不能将其加载的问题
查看>>
(基础篇)PHP获取时间、时间戳的各种格式写法汇总
查看>>
JAVA泛型详解2 转载
查看>>
div+CSS编程技巧
查看>>
Android 8.0 Settings新添加的重写getMetricsCategory
查看>>
#!/usr/bin/env python与#!/usr/bin/python的区别
查看>>
TSM对Oracle数据库备份脚本
查看>>
了解HAProxy原理及参数
查看>>
基于开源技术的上网行为管理实现方案
查看>>
Python学习笔记四(Python OS模块)
查看>>
Google Glass是工具不是玩具
查看>>
f_bfree和f_bavail的区别
查看>>
Web前端开发必备:《Jquery实战》第3版 介绍
查看>>
优秀网页设计:25个最佳的摄影师作品网站
查看>>
JavaScript Book Plan
查看>>
牛人推荐的跨浏览器兼容性总结
查看>>