在一些調試通過新的可能的內存泄漏,我碰到一個代碼來了,如同調試我發現,這個名單總是抱着對象,而他們從內部取出時以下C# - 在屬性
public IEnumerable<ISomething> TheSomeThingList
{
get
{
var somethings = new List<ISomething>();
// Fill the list by doing some iteration over internal dictionary of dictionaries
return somethings.AsEnumerable();
}
}
現在,字典。由於此列表保留對已移除對象的引用,因此此類代碼可能會導致內存泄漏?
此類代碼是否會導致內存泄漏?
如果是,該問題的解決方案是什麼?請注意,我無法更改屬性的界面。
我的第一反應是創建一個後臺字段Collection並在內部刪除發生時清除它。
一些細節 -
- 誰具有上述屬性的類是應用級的單
- 其填充到列表中的對象都應該(通過團結而不是通過單例模式實現)在某些操作(例如關閉文檔)後進行清理。抓住這些物體不會讓它們被垃圾收集。
只要您持有從此返回的'IEnumerable'的引用,它就不會被垃圾收集,並且其中包含的對象也不會被GCed。但我不會稱之爲「泄漏」。 – crashmstr
列表的生命週期取決於調用者在返回的'IEnumerable'持有多久。很明顯,預計它會被枚舉,然後被丟棄。這不會「泄漏」任何東西。 –