c#多线程写入内部字典

时间:2017-09-15 12:20:13

标签: c# multithreading

我有这个定义:

Dictionary<int, Dictionary<int, int>> dict = new Dictionary<int, Dictionary<int, int>>();

我提前创建了1000个这样的词典:

for (int ix=0; ix < 1000; ix++)
    dict[ix] = new Dictionary<int, int>();

我有1000个线程,每个线程在0到999之间有自己唯一的索引,每个写入数据如下:

dict[Thread unique Index][Some value] = some value.

这会有效还是多线程写作会出错?

我不想使用ConcurrentDictionary,因为我有很多写作,我想提高性能

2 个答案:

答案 0 :(得分:2)

另一种方法:借助ThreadStatic属性为每个线程使用一个字典,然后将内容合并到主字典(ConcurrentDictionary)。

通过这种方法,您可以随心所欲地使用线程。

答案 1 :(得分:0)

我假设每个线程都会将多个值写入此字典。

使用以下内容时:

dict[Thread unique Index][Some value] = some value;
dict[Thread unique Index][Some value] = some value;
...

首先会查找&#34;特定于线程的#34;设置值之前的字典。它的使用速度要快得多:

Dictionary<int, int> myDict = dict[Thread unique Index];
myDict[Some value] = some value;
myDict[Some value] = some value;
...

在此更改后,ConcurrentDictionary可能不会成为瓶颈。