【发布时间】:2015-03-13 19:27:57
【问题描述】:
好吧,我有一个应用程序可以同时启动数百个抓取任务,这些任务会将数百个找到的 url 添加到字典中
我正在使用锁定来添加每个找到的 url,但是我看到所有线程都在等待锁定(它可以工作,但我正在寻找更快的工作方式,如果有的话)
我想知道有没有更好的方法来提高性能
应用是.net 4.5.1 c#-5 WPF应用
这是我的字典定义
private static Dictionary<string, UrlHolder> dicUrlHolder = new Dictionary<string, UrlHolder>();
这就是我的使用方式
lock (dicUrlHolder)
{
//do stuff here each time gets a lock
}
所以我想知道还有什么更好的方法可以在数百个线程之间同时锁定数百次以添加/更新
【问题讨论】:
-
使用
ConcurrentDictionary -
就像 Vsevolod 所说的 ConcurrentDictionary 在那里会很好。关于这个问题的答案可以在这里看到:stackoverflow.com/questions/2940241/…(在这个问题中这个是重复的)
-
当然还有:在锁里面除了修改字典什么都不做。锁之前的所有其他语句
-
do stuff here each time gets a lock到底发生了什么? -
是的,我知道 ConcurrentDictionary 但它真的更快吗?正如@ie 提到的,这篇文章真的很有趣:codeproject.com/Articles/548406/… 我以前也读过它
标签: c# .net wpf multithreading dictionary