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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM