dotnet集合类型性能优化的两个小儿科的知识点
<p>比较水的文章,非常的基础,就当是记录下吧!</p><h3 id="1关于在集合中搜索带来的性能问题建议用字典dictionary">1.关于在集合中搜索带来的性能问题,建议用字典(Dictionary)</h3>
<p>很多时候需要在一个集合如List中按唯一键查找某个对象,如果用Where扩展方法或者find等方法,是很慢的,特别是大量这样的查找就特别慢。<br>
如果是对集合中的每个数据都要做点什么,那么干脆循环它好了。<br>
如果必须不断的搜索的场景,那么把集合ToDictionary(),之后每次需要用就在这个Dictionary中按key拿,性能飞起。</p>
<h3 id="2复杂类型都很占内存比如list和dictionary">2.复杂类型都很占内存,比如List和Dictionary</h3>
<p>这点大家都应该很理解,复杂类型带来功能高级方便的功能同时也会带来更多的开销。<br>
比如泛型List,少放点数据没太大问题,它是动态数组,添加大量数据时可能会触发容量调整,它有个Capacity属性表示它真实大小,添加的数据越多,这个Capacity越大,它一般是添加数据的2倍(不全是,没有数据时是0,一个数据时是4,所以不全是2倍),就是冗余分配更多的内存。<br>
用数组能减少这部分内存占用。同理Dictionary也类似。</p>
<h3 id="3再说过集合顺序问题">3.再说过集合顺序问题</h3>
<p>多线程下我们经常用ConcurrentDictionary字典,它的Keys和Values等属性返回的集合不一定是按添加数据的顺序的,这点在顺序敏感的代码中要注意,原因是它内存实现用了桶,数据在哪个桶可能是按hash来的,Values返回的时候顺序就没法保证,当然大部分时候甚至调试时与添加数据顺序是一样的。</p>
<p>碎碎念,end</p>
</div>
<div id="MySignature" role="contentinfo">
<div id="AllanboltSignature">
<p id="PSignature" style="border-top-color: #e0e0e0; border-top-width: 1px; border-top-style: dashed; border-right-color: #e0e0e0; border-right-width: 1px; border-right-style: dashed; border-bottom-color: #e0e0e0; border-bottom-width: 1px; border-bottom-style: dashed; border-left-color: #e0e0e0; border-left-width: 1px; border-left-style: dashed; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 80px; background-image: url(https://images.cnblogs.com/cnblogs_com/pains/109838/r_copyright.png); background-attachment: initial; background-origin: initial; background-clip: initial; font-family: 微软雅黑; font-size: 11px; background-color: #e5f1f4; background-position: 1% 50%; background-repeat: no-repeat no-repeat; ">
作者:Rick Carter
<br />
出处:http://pains.cnblogs.com/
<br />
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
</p>
</div><br><br>
来源:https://www.cnblogs.com/pains/p/19146191
頁:
[1]