Ham*_*med 2 c# multithreading dictionary concurrentdictionary parallel.foreach
我有一个字典,我想在foreach循环中修改它的值,但是,因为我的应用程序是时间关键的,我试图避免所有不必要的锁定开销.
var loopData = new Dictionary<int, List<string>>();
var results = new Dictionary<int, List<string>>();
/// loopData and results are both initialized
/// with same set of keys.
Parallel.ForEach(loopData, data =>
{
var list = data.Value;
/// manipulate list here
/// Is this safe?
results[data.Key] = list;
});
Run Code Online (Sandbox Code Playgroud)
标记命令是否安全?即,无需锁定即可读/写字典的不同键值对.
注1:我知道并发集合名称空间及其所有宏观集合.另外我知道我可以简单地lock使用突出显示的命令来确保它的安全性.如前所述,我的目标是尽可能避免不必要的开销.
注2:在此链接中提出了类似的问题.在该问题中,容器的项目在Parallel.ForEach循环内被修改.然而,这里我们没有修改键值对,因此容器是完整的,只有被指向的数据被改变.这使得它与上述问题不同.
更新
ConcurrentDictionary会增加最少的开销,但我想避免它,如果这是安全的.| 归档时间: |
|
| 查看次数: |
5189 次 |
| 最近记录: |