我需要编写一个保存为Dictionary的类。字典将由多个线程访问。 每次访问都会很短。
我期待:
您会选择哪种锁定策略?为什么? 我的第一个镜头是使用ReaderWriterLockSlim。但是在我阅读它之后,它比Monitor慢了至少两倍,我不再那么确定了,因为每次我访问dict时,我都会锁定很短的时间。
TIA 马丁
答案 0 :(得分:3)
鉴于最常见的操作是编写而且你从不需要多个并发的读者,据我所知,我只会使用普通的锁。我看不出ReaderWriterLockSlim
会对你有所帮助,它肯定会给你更复杂的代码。
编辑:一种可能的优化是只从写入线程访问更改列表。然后,读取线程需要在处理它之前更新基础字典时锁定该列表 。假设字典非常大但是更改列表相对较小,这意味着写入线程将被阻止更短的时间。
实际上,您可以使用Queue
之类的内容而不是列表,并且可能使读取线程出现小批量并产生,从而进一步减少写入线程的延迟 - 因此如果有100个更改进程中,读取线程可能会读取其中的10个,这样可以使得任何阻塞等待添加到队列中的写入线程可以轮到他们。
对此有更复杂的解决方案,具体取决于性能的重要程度,特别是在延迟方面 - 但我首先只是锁定字典。