在一些调试过程中,我遇到了如下代码
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();
}
}
现在,在调试过程中,我观察到这个列表总是包含从内部字典中删除的对象。由于此列表包含对已删除对象的引用,
这样的代码会导致内存泄漏吗?
如果是,这个问题的解决方案是什么?请注意,我无法更改属性的接口(interface)。
我的第一 react 是创建一个支持字段集合,并在发生内部删除时将其清除。
更多细节-
- 具有上述属性的类是一个应用级单例(通过unity实现,而不是单例模式)
- 填充在列表中的对象应该在某些操作(比如关闭文档)后被清理。持有这些对象将不允许它们被垃圾收集。
最佳答案
这不是内存泄漏,因为仍然有对这些对象的“事件”引用。它们在该列表中,并且该列表是从该方法返回的。如果这些对象没有保持事件状态,那么此方法的调用者将访问已删除的对象,这是不应该发生的。每当无法再通过有根引用访问该列表时,并且如果该列表中的任何项目都无法在其他地方访问,则可以对元素和列表进行垃圾回收。
没有泄漏。
关于C# - 属性中的 new 可能导致内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19543565/