【问题标题】:How to use a dictionary in a multi threading application如何在多线程应用程序中使用字典
【发布时间】: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


【解决方案1】:

你可以使用ConcurrentDictionary&lt;TKey, TValue&gt; Class

http://msdn.microsoft.com/en-us/library/dd287191(v=vs.110).aspx

【讨论】:

  • @MonsterMMORPG 说他在这里遇到了性能问题。不幸的是,ConcurrentDictionary&lt;TKey, TValue&gt; 并不总是有帮助。参见例如this codeproject article
猜你喜欢
  • 1970-01-01
  • 2014-03-15
  • 2018-04-28
  • 2010-09-09
  • 2019-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多