1

我正在对一些后端代码进行并行化处理,并尝试不中断接口。我们有几种返回Dictionary和内部的方法,我使用ConcurrentDictionary在其上执行并行操作。在.NET 4.0中从ConcurrentDictionary获取字典<K,V><K,V>

什么是从这些返回字典的最佳方式?

这种感觉几乎是太过简单:

return myConcurrentDictionary.ToDictionary(kvp => kvp.Key, kvp => kvp.Value); 

我觉得我失去了一些东西。

回答

4

Constructing the Dictionary<K,V> directly将是略微比呼叫ToDictionary更有效率。构造函数将预先分配目标字典到正确的大小,并且不需要随时随地调整大小。

return new Dictionary<K,V>(myConcurrentDictionary); 

如果您ConcurrentDictionary<K,V>使用自定义IEqualityComparer<K>,那么你可能会想pass that into the constructor too

+0

哦,我不知道。好信息! – Squirrelsama 2010-10-20 19:37:23

+0

如果在构建新词典时将项目添加到词典或从词典中删除项目,这会起作用吗? – supercat 2010-12-09 19:03:18

+0

@supercat:是的,没关系。 *“从字典返回的枚举器可以安全地与字典的读写同时使用,但它不代表字典的即时快照。通过枚举器公开的内容可能包含对字典的修改在调用GetEnumerator之后。“* http://msdn.microsoft.com/en-us/library/dd287131.aspx – LukeH 2010-12-09 23:58:15

1

没有。这完全没问题。 .NET序列就像那样好。 :D