ConcurrentDictionary让你的多线程代码更优美
ConcurrentDictionary是.net4.0推出的一套线程安全集合里的其中一个,和它一起被发行的还有ConcurrentStack,ConcurrentQueue等类型,它们的单线程版本(线程不安全的,Queue,Stack,Dictionary)我们一定不会陌生,可以说是经常用到,一个类的实例里,有个属性是个字典,我们不加考虑的会用Dictionary,而当这个属性被提升为static静态的(类级别的)时候,我们就要考虑它的线程安全性了,因为它有可能被多个线程同时访问,当然,如果这个对象是只读的,也无所谓线程安全,但如果这个属性是可以被写的,那就需要把它加锁了,这代码我们经常看到:
lock(obj){
_dic[key]=value;
}
看吧,你的代码会有很我的lock块,不说它是否漂亮,但从性能上看,就不能被接收,我们知道,lock会把其它线程锁在外面,无论是读还是写,都会被锁,性能非常并,微软自己也看到了它的不足,所以才推出了System.Collections.Concurrent集合,在这个命名空间里,开发了一批线程安全的对象,当然内核也类似于lock机制,但小微自己一定是做了不少优化的,这是我们能肯定的,呵呵.
如果你之前的方法用的都是Dicationary的,那修改也方便,只要利用适配器模式,把它加工一下即可

private readonly static ConcurrentDictionary<string, T> _dic;
#region IDictionary<string,ResultType> 成员 public void Add(string key, T value)
{
_dic.TryAdd(key, value);
} public bool ContainsKey(string key)
{
return _dic.ContainsKey(key);
} public ICollection<string> Keys
{
get { return _dic.Keys; }
} public bool Remove(string key)
{
T val;
return _dic.TryRemove(key, out val);
} public bool TryGetValue(string key, out T value)
{
return _dic.TryGetValue(key, out value);
} public ICollection<T> Values
{
get { return _dic.Values; }
} public T this[string key]
{
get
{
return _dic[key];
}
set
{
_dic[key] = value;
}
} #endregion

怎么样,没有lock块的代码漂亮了许多吧!
ConcurrentDictionary让你的多线程代码更优美的更多相关文章
- 基础才是重中之重~ConcurrentDictionary让你的多线程代码更优美
回到目录 ConcurrentDictionary是.net4.0推出的一套线程安全集合里的其中一个,和它一起被发行的还有ConcurrentStack,ConcurrentQueue等类型,它们的单 ...
- 基于AOP的MVC拦截异常让代码更优美
与asp.net 打交道很多年,如今天微软的优秀框架越来越多,其中微软在基于mvc的思想架构,也推出了自己的一套asp.net mvc 框架,如果你亲身体验过它,会情不自禁的说‘漂亮’.回过头来,‘漂 ...
- sublime text 的小细节设置,让你的代码更优美
这些属性都可以在 首选项>设置-默认 里修改下面也会介绍几个比较常用的几个插件 字体大小: "font_size": 17 高亮编辑中的一行 "highlight_ ...
- ES6几大特性,让你的代码更优美
1.Default Parameters(默认参数) in ES6 还记得我们以前不得不通过下面方式来定义默认参数: var link = function (height, color, url ...
- [C#] 用一种更优美的方式来替换掉又多又长的switch-case代码段
switch-case语句是我们编码过程中常用的一种分支语句.然而正所谓成也萧何败萧何,每当我们向一个已经拥有了成百上千行的switch-case代码段中添加新的case分支的时候,我们是否有过为代码 ...
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 更优美的Oracle数据库上的代码生成器
代码生成器进行了改进,针对Oracle数据库生成更优美的代码.这样生成出来的代码,更像微软的风格,更像C#.NET的标准规范,阅读起来也更优美.把Oracle表字段名默认大写, 有_分割等进行了优化, ...
- 使用ConcurrentDictionary替代Hashtable对多线程的对象缓存处理
在之前一段时间里面,我的基类多数使用lock和Hashtable组合实现多线程内缓存的冲突处理,不过有时候使用这两个搭配并不尽如人意,偶尔还是出现了集合已经加入的异常,对代码做多方的处理后依然如故,最 ...
- 大佬的编码建议,让你的代码更pythonic
大佬的编码建议,让你的代码更pythonic Raymond Hettinger是 Python 核心开发者,本文提到的许多特性都是他开发的. 若无例外,本文代码中出现的 colors names d ...
- 干货最实用的 Python 多线程代码框架
前言 很多地方都要用到多线程,这是我经常用的多线程代码,放在博客园记录下. 代码 from multiprocessing.pool import ThreadPool thread = 10 ite ...
随机推荐
- SQFREE - Square-free integers
SQFREE - Square-free integers 求n以内,约数中不包含任意一个平方数的个数,\(n≤10^{14}\). 解 显然为约数计数问题,于是想办法转换为代数问题,不难列出 \[a ...
- MySQL 中LIMIT的使用详解
在使用数据库过程中,常会遇到查询或者导出某个数据表或者查询集的前几条或者后几条记录,LIMIT可以很好的满足需求. LIMIT基本语法: 如果只给定一个参数,表示记录数. mysql; ) 相当于 m ...
- System.Web.Mvc.RedirectToRouteResult.cs
ylbtech-System.Web.Mvc.RedirectToRouteResult.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutr ...
- 版本控制git之二 分支 切换分支 创建分支 合并 删除
版本控制git之二 分支 有人把 Git 的分支模型称为它的`‘必杀技特性’',也正因为这一特性,使得 Git 从众多版本控制系统中脱颖而出. 为何 Git 的分支模型如此出众呢? Git 处 ...
- IO流11 --- 缓冲流(字符型)实现文本文件的复制 --- 技术搬运工(尚硅谷)
方法一:读到指定字符数组 @Test public void test7(){ BufferedReader br = null; BufferedWriter bw = null; try { br ...
- Django之模板语言(一)
1.Django的模板语言(简而言之,字符串替换) 1.目前为止已经学过的模板语言: 1.{{ name }} ------>变量 2. for 循环: {% for i in book_li ...
- hive新加入字段插入数据需要注意事项
hive中新加字段需要注意如下 1)如果表中有分区字段,必须先删除分区才能插入数据否则为null; 2)insert override TABLE table1 select counm1,counm ...
- NIO的学习总结
1.简单画的NIO流程图 2.代码实现编程: Client: package nio; import java.io.IOException; import java.net.InetSocketAd ...
- Leetcode 242.有效的字母异位词(Python3)
题目: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词. 示例 1: 输入: s = "anagram", t = "nagaram& ...
- Codeforces-348E Pilgrims
#4342. CF348 Pilgrims 此题同UOJ#11 ydc的大树 Online Judge:Bzoj-4342,Codeforces-348E,Luogu-CF348E,Uoj-#11 L ...