在一些调试过程中,我遇到了如下代码
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 并在内部删除发生时清除它。
更多细节 -
- 具有上述属性的类是应用程序级别的单例(通过统一而不是通过单例模式实现)
- 列表中填写的对象应该在某些操作后被清理(比如关闭文档)。持有这些对象将不允许它们被垃圾收集。