我从事的一个项目是通过商业分析工具进行分析的。它将我们的 ReaderWriterLockSlim 实现标记为潜在的内存泄漏源,因为我们没有调用 Dispose() 方法。
我从未见过在此锁上调用此方法:无论是在我编写的代码中还是在我从中学习的代码示例中。应该调用 Dispose() 吗?如果当线程仍然需要它时它就被释放了怎么办?这可能吗?
这是我们当前如何使用它的示例 - 没有 Dispose():
Public Class Test
{
private ReaderWriterLockSlim _lookupLock = new ReaderWriterLockSlim();
public IDictionary<int, SomeObject> GetAll()
{
_lookupLock.EnterWriteLock();
try
{
if (X == null || X.Count == 0)
{
Do Something...;
}
}
finally
{
_lookupLock.ExitWriteLock();
}
return Something...;
}
}
最佳答案
它确实需要处理。
大多数情况下,ReaderWriterLockSlim
用于保护静态资源,因此将是不需要释放的静态实例。
但在您的情况下(每个实例一个 ReaderWriterLockSlim
),您需要将您的类设置为 IDisposable
,并处置 ReaderWriterLockSlim
。
或者也许更好的选择是使用普通锁(即监视器)来保护实例资源,而不是使用 ReaderWriterLockSlim
。可能没有太大的性能差异,它使您的代码更简单,并且避免您需要使类 IDisposable。
像ConcurrentDictionary
这样的框架类使用普通锁。
关于c# - 应该在 ReaderWriterLockSlim 锁上调用 Dispose() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12411879/