问题标签 [concurrentdictionary]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4269 浏览

c# - Redis 相对于 c# Dictionary 的优势

我想知道 Redis 与它的 C# 客户端相比 Dictionary/ConcurrentDictionary 和其他方面有什么好处。

我不确定何时使用 redis 被认为是字典存储的过度杀伤力。

谢谢。

0 投票
1 回答
1319 浏览

c# - 嵌套并发字典

我想在解析一个大型 XML 文件后创建一个嵌套的 ConcurrentDictionary。运行下面的代码时我得到的是最内层(tmpDictionaryDid)字典为空。

我想我没有正确保存字典或错误地加载它们,但我无法弄清楚什么是不正确的。

甚至可以用 ConcurrentDictionary 解决它还是我应该尝试其他解决方案?

0 投票
1 回答
1095 浏览

protobuf-net - 是否可以使用 protobuf-net 序列化 ConcurrentDictionary 数组?

是否可以使用 protobuf-net 序列化以下类?我已经翻遍了,我找不到这种情况的任何例子?

我目前得到标准的“不支持嵌套或锯齿状列表和数组”。但是,我不确定如何映射这样的类?

编辑: 根据@Marc 下面的建议,我能够成功地使用 protobuf-net 来序列化上面的类。为了完整起见,我在下面添加了我的解决方案:

创建了以下类,其中包含 ModelPartition 对象的列表:

ModelPartition 对象用于通过将每个索引位置和单个 ConcurrentDictionary 成员保存在单独的 ModelPartition 对象中来“抽象” ConcurrentDictionary 数组,然后将其放置在 GenomeModel.geneTokens ModelPartition 列表中:

最后,在序列化期间,使用 ModelPartition 作为包装器对象,使用简短的转换将数据从原始“示例”对象加载到 GenomeModel 对象中:

谢谢马克!

0 投票
2 回答
1621 浏览

c# - ConcurrentDictionary 在 GetOrAdd 之后编辑值是否线程安全?

我正在使用并发字典的 GetOrAdd 方法来检索值列表,然后参考我正在编辑它们的值列表。这样做是线程安全的吗?

第一种方法是添加值,第二种方法是清除列表。

0 投票
1 回答
930 浏览

c# - ConcurrentDictionnary tryAdd

当您使用ConcurrentDictionary并尝试向其添加新的密钥对时,它TryAdd会检查值是否存在,如果不存在则添加。有什么方法可以添加具有不同值的重复键吗?或者也许有替代的线程安全字典允许这样做?

0 投票
2 回答
1586 浏览

c# - ConcurrentDictionary & atomic operations - 有时需要锁?

假设我有这个简单的代码:(简化)

哪里MyConCurrentDictionary是静态的ConcurrentDictionary<string, string> (位于不同的类中)。

此方法从许多实例运行。(如果你愿意,signalR 集线器)

我需要插入DB/log user/connectionID存在时。

好的,所以#4当多线程访问时行是线程安全的ConcurrentDictionary

但是还有另一种方法是 RemoveUser - 从字典中删除用户:

但是上下文可能会出现在行#5中,这将执行RemoveUser 并从 ConcurrentDictionary 中删除用户名。

所以为了解决这个问题 - 代码将是这样的:

这完全违背了我的目的 ConcurrentDictionary

问题

在多线程环境中做这样的事情的正确方法是什么 - 仍然有 ConcurrentDictionary 的好处?

nb ,是的 ConcurrentDictionary 仅对字典内的操作是线程安全的。但我想说的是,在特定情况下,我失去了 ConcurrentDictionary 的好处,因为我仍然需要使用锁。(我可能错了)。

0 投票
1 回答
702 浏览

c# - 如何在我的自定义 POCO 中使用 .NET ConcurrentDictionary 的 AddOrUpdate?

我不确定如何编写方法的func一部分ConcurrentDictionary.AddOrUpdate,即检查UpdatedOn属性是否大于或等于现有键/值。

鉴于以下 POCO,当新项目的 DateTime 值大于现有项目时,我如何使用 .NETConcurrentDictionary.AddOrUpdate更新字典中的项目(如果存在)......否则它只是添加它。

(伪代码)

我一直在查看第二个重载方法( AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>)),但我只是不确定如何执行该Func方法的一部分。

0 投票
0 回答
217 浏览

static - 如果您将值锁定在 ConcurrentDictionary 中,最佳实践

我正在尝试找到最佳解决方案(性能和准确度)以在 Web 服务中拥有静态对象列表。

一些 Web 方法将对这些对象进行修改并在修改后返回对象的状态,而其他 Web 方法将请求当前状态。

这需要在每次操作中都准确无误,因为它与金钱有关。这个网络服务将被来自我们大型项目不同领域的请求轰炸。

我一直在查看 ConcurrentDictionary,在阅读其他一些 SO 问题时,我遇到了以下答案:https ://stackoverflow.com/a/1966462/151625

以下段落是我不想要的:

现在考虑一下。在有一个店员的商店里,如果你一直排到最前面,问店员“你有卫生纸吗”,他说“有”,然后你去“好吧,我”当我知道我需要多少时会回复你”,然后当你回到队伍的最前面时,商店当然可以卖光了。线程安全集合不会阻止这种情况。

所以基本上我在问,我应该将值锁定在 ConcurrentDictionary 中,还是违背了它的全部目的?如果我应该/可以,最好的方法是什么,如果不是,我有什么选择?

0 投票
2 回答
94 浏览

c# - 保证记录/隐含记录/未记录的行为

查看 ConcurrentDictionary 文档,它说以下内容:

表示可由多个线程同时访问的键/值对的线程安全集合。

现在,当阅读本文时,我认为我可以调用 ConcurrentDictionary API 中的任何方法,并且它将是线程安全的……但这意味着也包括显式实现,我有这个保证吗?

我的例子是如果我想要一个原子操作从 ConcurrentDictionary 中删除一个项目,如果它的值是某个值。

所以我可以这样做:

现在我查看了源代码,该操作是原子和线程安全的,但它不在 ConcurrentDictionary API 上的事实是否意味着我不应该使用它......或者我正在使用集合来做我不应该用它做的事情。

我可以更进一步,编写以下扩展方法:

这将出现在 ConcurrentDictionary 的 Intellisense 中,因为它实现了 ICollection 接口,许多开发人员甚至可能不知道有什么不妥(如果真的有什么?!)

编辑: 我所说的“隐式记录”的意思是 ConcurrentDictionary 实现了一组接口。它的文档说它的线程是安全的,但没有说明它是否仅适用于该页面上列出的方法,而是暗示实例上的所有操作都是安全的。

0 投票
3 回答
319 浏览

c# - 对 ConcurrentDictionary 的线程安全更改

我正在循环填充ConcurrentDictionary一个:Parallel.ForEach

如何在不使用 lock 语句的情况下以线程安全的方式执行最后一步?

编辑: 假设这ItemCollection是线程安全的。