ConcurrentDictionary和Dictionary对比

Posted zhuyapeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ConcurrentDictionary和Dictionary对比相关的知识,希望对你有一定的参考价值。

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对比的主要内容,如果未能解决你的问题,请参考以下文章

什么时候应该使用 ConcurrentDictionary 和 Dictionary?

ConcurrentDictionary源码概读

ConcurrentDictionary和Dictionary对比

一起来看CORE源码 ConcurrentDictionary

ConcurrentDictionary 与 Dictionary

ConcurrentDictionary