我发现我的应用程序可能会变慢,因此我有两个问题:
例如。我有很多客户,这些客户变化很快。对于迭代,我应该使用readerlock还是简单的锁就足够了?
最佳答案
不,您当前的情况并不安全。
特别是,如果集合在迭代时发生更改,则在迭代线程中将获得InvalidOperationException
。您应该在迭代器的整个过程中获得阅读器锁:
请注意,这与为迭代的每个步骤获取读取器锁不同-这无济于事。
至于读取器/写入器锁和“普通”锁之间的区别-读取器/写入器锁的想法是,多个线程可以同时读取,但是只有一个线程可以写入(并且仅当没有一个在读取时) 。在某些情况下,这可以提高性能-但也会增加解决方案的复杂性(就正确性而言)。我还建议您尽可能使用.NET 3.5中的
ReaderWriterLockSlim
-它比原始ReaderWriterLock
效率更高,而且ReaderWriterLock
IIRC存在一些固有的问题。我个人通常使用简单的锁,直到我证明锁争用是性能瓶颈。您是否已对应用程序进行了概要分析,以找出瓶颈所在?