我发现我的应用程序可能会放缓,所以我会有两个问题:
发布于 2009-11-01 10:05:26
不,你现在的情况不安全。
特别是,如果一个集合在迭代过程中发生了变化,那么您将在迭代线程中得到一个InvalidOperationException。您应该在迭代器的整个过程中获得一个读取器锁:
在collection
上迭代
注意,这与获得迭代的每一步的读取器锁是不一样的--这不会有帮助。
至于读取器/写入器锁和“普通”锁之间的区别--读取器/写入器锁的思想是多个线程可以同时读取,但只有一个线程可以写入(而且只有当没有人正在读取时)。在某些情况下,这可以提高性能--但它也增加了解决方案的复杂性(从正确的角度来看)。如果可能的话,我还建议您使用.NET 3.5中的.NET--它比最初的ReaderWriterLock要高效得多,并且ReaderWriterLock IIRC存在一些固有的问题。
就我个人而言,我通常使用简单的锁,直到我证明锁争用是性能瓶颈。您是否分析过您的应用程序,以找出瓶颈所在?
https://stackoverflow.com/questions/1656772
复制相似问题