首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ConcurrentDictionary<>性能在单线程误解?

ConcurrentDictionary<>性能在单线程误解?
EN

Stack Overflow用户
提问于 2013-03-06 15:58:49
回答 9查看 27.6K关注 0票数 26

相关简要信息:

AFAIK、并发堆栈、队列和包类是在内部使用链接列表实现的。

我知道争用少得多,因为每个线程都负责自己的链接列表。不管怎样,我的问题是关于ConcurrentDictionary<,>

但是我正在测试这个代码:(单线程)

代码语言:javascript
运行
复制
Stopwatch sw = new Stopwatch();
sw.Start();

    var d = new ConcurrentDictionary < int,  int > ();
    for(int i = 0; i < 1000000; i++) d[i] = 123;
    for(int i = 1000000; i < 2000000; i++) d[i] = 123;
    for(int i = 2000000; i < 3000000; i++) d[i] = 123;
    Console.WriteLine("baseline = " + sw.Elapsed);

sw.Restart();

    var d2 = new Dictionary < int, int > ();
    for(int i = 0; i < 1000000; i++)         lock (d2) d2[i] = 123;
    for(int i = 1000000; i < 2000000; i++)   lock (d2) d2[i] = 123;
    for(int i = 2000000; i < 3000000; i++)   lock (d2) d2[i] = 123;
    Console.WriteLine("baseline = " + sw.Elapsed);

sw.Stop();

结果:(多次测试,相同值(+/-))。

代码语言:javascript
运行
复制
baseline = 00:00:01.2604656
baseline = 00:00:00.3229741

问题:

使ConcurrentDictionary<,>在单线程环境中慢得多的是什么?

我的第一反应是lock(){}总是慢一点。但显然不是。

EN

Stack Overflow用户

发布于 2022-06-09 14:38:47

在.Net 4中,ConcurrentDictionary使用了非常糟糕的锁管理和争用解决方案,这使得它非常慢。具有自定义锁定和/或TestAndSet使用的字典,整个字典速度更快。

票数 0
EN
查看全部 9 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15252115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档