我從事的一個項目是通過商業分析工具進行分析的。它將我們的ReaderWriterLockSlim實現標記爲潛在的內存泄漏源,因爲我們沒有調用Dispose()方法。應該在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...;
}
}
當然,它有一個Dispose()方法,這樣工具就會發出抱怨。你必須權衡的是你實際調用Dispose()的成本。這是非常高的一個,你*有*確保使用RWLS的所有*線程已經退出。這可能很難實現。簡單的方法是把它留給垃圾收集器,它永遠不會錯。 –