码迷,mamicode.com
首页 > 其他好文 > 详细

ConcurrentDictionary和Dictionary对比

时间:2020-04-22 20:19:43      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:int   写入   blog   ring   增删查改   lin   控制   安全   bsp   

Dictionary非线程安全集合

代码测试会报错:集合已经改变

    public class ConcurrentDictionaryTest
    {
        public void Run()
        {
            Dictionary<string, int> dic = new Dictionary<string, int>();
            Task.Run(()=> {
                while (true)
                {
                    foreach (var item in dic)
                    {
                        Console.WriteLine(item.Key);
                    }
                }
            });

            while (true)
            {
                for (int i = 0; i < 10000; i++)
                {
                    dic[i.ToString()] = i;
                }
            }
        }
    }

 

ConcurrentDictionary线程安全集合

直接上代码测:这个不会报错。

    public class ConcurrentDictionaryTest
    {
        public void Run()
        {
            ConcurrentDictionary<string, int> dic = new ConcurrentDictionary<string, int>();
            Task.Run(()=> {
                while (true)
                {
                    foreach (var item in dic)
                    {
                        Console.WriteLine(item.Key);
                    }
                }
            });

            while (true)
            {
                for (int i = 0; i < 10000; i++)
                {
                    dic[i.ToString()] = i;
                }
            }
        }
    }
ConcurrentDictionary里面会有细粒度锁定,所以在增删查改基本不需要锁控制。

关于他们的速率看另外一篇微博:写入速率
Dictionary快点,但在加锁读取情况ConcurrentDictionary更快。
代码详见:https://blog.csdn.net/conquerwave/article/details/50815557

ConcurrentDictionary和Dictionary对比

标签:int   写入   blog   ring   增删查改   lin   控制   安全   bsp   

原文地址:https://www.cnblogs.com/zhuyapeng/p/12754829.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!