问题标签 [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.
c# - Redis 相对于 c# Dictionary 的优势
我想知道 Redis 与它的 C# 客户端相比 Dictionary/ConcurrentDictionary 和其他方面有什么好处。
我不确定何时使用 redis 被认为是字典存储的过度杀伤力。
谢谢。
c# - 嵌套并发字典
我想在解析一个大型 XML 文件后创建一个嵌套的 ConcurrentDictionary。运行下面的代码时我得到的是最内层(tmpDictionaryDid)字典为空。
我想我没有正确保存字典或错误地加载它们,但我无法弄清楚什么是不正确的。
甚至可以用 ConcurrentDictionary 解决它还是我应该尝试其他解决方案?
protobuf-net - 是否可以使用 protobuf-net 序列化 ConcurrentDictionary 数组?
是否可以使用 protobuf-net 序列化以下类?我已经翻遍了,我找不到这种情况的任何例子?
我目前得到标准的“不支持嵌套或锯齿状列表和数组”。但是,我不确定如何映射这样的类?
编辑: 根据@Marc 下面的建议,我能够成功地使用 protobuf-net 来序列化上面的类。为了完整起见,我在下面添加了我的解决方案:
创建了以下类,其中包含 ModelPartition 对象的列表:
ModelPartition 对象用于通过将每个索引位置和单个 ConcurrentDictionary 成员保存在单独的 ModelPartition 对象中来“抽象” ConcurrentDictionary 数组,然后将其放置在 GenomeModel.geneTokens ModelPartition 列表中:
最后,在序列化期间,使用 ModelPartition 作为包装器对象,使用简短的转换将数据从原始“示例”对象加载到 GenomeModel 对象中:
谢谢马克!
c# - ConcurrentDictionary 在 GetOrAdd 之后编辑值是否线程安全?
我正在使用并发字典的 GetOrAdd 方法来检索值列表,然后参考我正在编辑它们的值列表。这样做是线程安全的吗?
第一种方法是添加值,第二种方法是清除列表。
c# - ConcurrentDictionnary tryAdd
当您使用ConcurrentDictionary
并尝试向其添加新的密钥对时,它TryAdd
会检查值是否存在,如果不存在则添加。有什么方法可以添加具有不同值的重复键吗?或者也许有替代的线程安全字典允许这样做?
c# - ConcurrentDictionary & atomic operations - 有时需要锁?
假设我有这个简单的代码:(简化)
哪里MyConCurrentDictionary
是静态的ConcurrentDictionary<string, string>
(位于不同的类中)。
此方法从许多实例运行。(如果你愿意,signalR 集线器)
我需要插入DB
/log
仅当user/connectionID
存在时。
好的,所以#4
当多线程访问时行是线程安全的ConcurrentDictionary
但是还有另一种方法是 RemoveUser - 从字典中删除用户:
但是上下文可能会出现在行#5
中,这将执行RemoveUser
并从 ConcurrentDictionary 中删除用户名。
所以为了解决这个问题 - 代码将是这样的:
这完全违背了我的目的 ConcurrentDictionary
。
问题
在多线程环境中做这样的事情的正确方法是什么 - 仍然有 ConcurrentDictionary 的好处?
nb ,是的 ConcurrentDictionary 仅对字典内的操作是线程安全的。但我想说的是,在特定情况下,我失去了 ConcurrentDictionary 的好处,因为我仍然需要使用锁。(我可能错了)。
c# - 如何在我的自定义 POCO 中使用 .NET ConcurrentDictionary 的 AddOrUpdate?
我不确定如何编写方法的func
一部分ConcurrentDictionary.AddOrUpdate
,即检查UpdatedOn
属性是否大于或等于现有键/值。
鉴于以下 POCO,当新项目的 DateTime 值大于现有项目时,我如何使用 .NETConcurrentDictionary.AddOrUpdate
更新字典中的项目(如果存在)......否则它只是添加它。
(伪代码)
我一直在查看第二个重载方法( AddOrUpdate(TKey, TValue, Func<TKey, TValue, TValue>)
),但我只是不确定如何执行该Func
方法的一部分。
static - 如果您将值锁定在 ConcurrentDictionary 中,最佳实践
我正在尝试找到最佳解决方案(性能和准确度)以在 Web 服务中拥有静态对象列表。
一些 Web 方法将对这些对象进行修改并在修改后返回对象的状态,而其他 Web 方法将请求当前状态。
这需要在每次操作中都准确无误,因为它与金钱有关。这个网络服务将被来自我们大型项目不同领域的请求轰炸。
我一直在查看 ConcurrentDictionary,在阅读其他一些 SO 问题时,我遇到了以下答案:https ://stackoverflow.com/a/1966462/151625
以下段落是我不想要的:
现在考虑一下。在有一个店员的商店里,如果你一直排到最前面,问店员“你有卫生纸吗”,他说“有”,然后你去“好吧,我”当我知道我需要多少时会回复你”,然后当你回到队伍的最前面时,商店当然可以卖光了。线程安全集合不会阻止这种情况。
所以基本上我在问,我应该将值锁定在 ConcurrentDictionary 中,还是违背了它的全部目的?如果我应该/可以,最好的方法是什么,如果不是,我有什么选择?
c# - 保证记录/隐含记录/未记录的行为
查看 ConcurrentDictionary 文档,它说以下内容:
表示可由多个线程同时访问的键/值对的线程安全集合。
现在,当阅读本文时,我认为我可以调用 ConcurrentDictionary API 中的任何方法,并且它将是线程安全的……但这意味着也包括显式实现,我有这个保证吗?
我的例子是如果我想要一个原子操作从 ConcurrentDictionary 中删除一个项目,如果它的值是某个值。
所以我可以这样做:
现在我查看了源代码,该操作是原子和线程安全的,但它不在 ConcurrentDictionary API 上的事实是否意味着我不应该使用它......或者我正在使用集合来做我不应该用它做的事情。
我可以更进一步,编写以下扩展方法:
这将出现在 ConcurrentDictionary 的 Intellisense 中,因为它实现了 ICollection 接口,许多开发人员甚至可能不知道有什么不妥(如果真的有什么?!)
编辑: 我所说的“隐式记录”的意思是 ConcurrentDictionary 实现了一组接口。它的文档说它的线程是安全的,但没有说明它是否仅适用于该页面上列出的方法,而是暗示实例上的所有操作都是安全的。
c# - 对 ConcurrentDictionary 的线程安全更改
我正在循环填充ConcurrentDictionary
一个:Parallel.ForEach
如何在不使用 lock 语句的情况下以线程安全的方式执行最后一步?
编辑: 假设这ItemCollection
是线程安全的。