在一些调试过程中,我遇到了类似下面的代码
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();
}
}
Run Code Online (Sandbox Code Playgroud)
现在,在调试过程中,我发现这个列表在从内部字典中删除时始终保持对象.由于此列表包含对已删除对象的引用,
这样的代码会导致内存泄漏吗?
如果是,这个问题的解决方案是什么?请注意,我无法更改属性的接口.
我的第一反应是创建一个支持字段集合,并在内部删除发生时清除它.
更多细节 -
这不是内存泄漏,因为仍然存在对这些对象的"活"引用.它们位于该列表中,该列表正从该方法返回.如果这些对象未保持活动状态,则此方法的调用者将访问已删除的对象,这些对象不应发生.每当无法再通过有根引用访问该列表时,如果该列表中的任何项都无法在其他地方访问,则可以对元素和列表进行垃圾回收.
没有泄漏.
| 归档时间: |
|
| 查看次数: |
344 次 |
| 最近记录: |