.net在其他线程获取值时更新字典

时间:2015-01-18 15:56:36

标签: c# multithreading dictionary asp.net-web-api thread-safety

我有一个网络项目(网络API),其中速度是主要关注点。 每个请求从内存中的字典中获得响应(根据某些键)。

在其他一些事件上 - 需要使用新值更新此字典。 所有更新过程大约需要20秒,而且在此期间我不介意在更改之前根据字典值获取响应。

我希望尽可能快地实现字典更改,每毫秒计数。

我想避免使用任何锁/互斥锁实现,因为检查它们的值也会非常耗时。

如果这里有最好的做法?我不介意"浪费"一些旧值的电话。主要关注的是整体通话速度。

如果在以下情况下会发生什么:

_myDictionary = new Dictionary<>({some dict values});

有一个从_myDictionary获取值的调用。 ?

_myDictionary.TryGetValue("some key");

1 个答案:

答案 0 :(得分:0)

保证分配引用类型是原子操作:

  

5.5变量引用的原子性

     

以下数据类型的读写是原子的:bool,char,byte,sbyte,short,ushort,uint,int,float和引用类型。此外,在先前列表中具有基础类型的枚举类型的读取和写入也是原子的。其他类型的读写,包括long,ulong,double和decimal,以及用户定义的类型,不保证是原子的。除了为此目的而设计的库函数之外,不保证原子读 - 修改 - 写,例如在递增或递减的情况下。

(来自C# Language Specification

因此,准备一本新词典然后在完成所有词典时分配它是完全安全的。