gpt4 book ai didi

C# - 属性中的 new 可能导致内存泄漏

转载 作者:行者123 更新时间:2023-11-30 19:17:05 24 4
gpt4 key购买 nike

在一些调试过程中,我遇到了如下代码

 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 是创建一个支持字段集合,并在发生内部删除时将其清除。

更多细节-

  1. 具有上述属性的类是一个应用级单例(通过unity实现,而不是单例模式)
  2. 填充在列表中的对象应该在某些操作(比如关闭文档)后被清理。持有这些对象将不允许它们被垃圾收集。

最佳答案

这不是内存泄漏,因为仍然有对这些对象的“事件”引用。它们在该列表中,并且该列表是从该方法返回的。如果这些对象没有保持事件状态,那么此方法的调用者将访问已删除的对象,这是不应该发生的。每当无法再通过有根引用访问该列表时,并且如果该列表中的任何项目都无法在其他地方访问,则可以对元素和列表进行垃圾回收。

没有泄漏。

关于C# - 属性中的 new 可能导致内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19543565/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com