c# - 垃圾收集器 - 我声明静态列表时的行为
问题描述
我有一个重要的问题要问你。我以这种方式声明了私有静态列表
private static List<structType> myList = new List<structType>();
我的应用程序一直在工作,我想知道当 GC 工作时这个列表会是什么。我在特定服务中将数据添加到此列表中,然后将其保留了几分钟,然后将其删除。当然,这些数据保留在特定的服务中,并且在服务之后我删除了这些数据。
我正在寻找信息它将如何表现垃圾收集器,因为我不想提前删除这些数据并失去对这个列表的引用。
我不确定我是否很好理解行为 GC,如果您有任何信息,请分享。
谢谢 :)
我知道我的解决方案不好,但有时我需要保留可能已执行其他服务的特定信息。这种方式涉及到一个具体的案例。
解决方案
静态字段是 GC 根,所以:
- 该列表在应用程序的整个生命周期内都是可访问的(通过静态字段)
- 这意味着列表后面的数组是可访问的
- 值类型直接存在于数组中
所以:没什么好担心的(除了线程安全,但这是一个单独的问题)
作为一般规则:如果您甚至可以注意到它已被收集:它无法被收集。这不包括通过“终结器”间接注意,以及任何涉及WeakReference
.
推荐阅读
- python-3.x - 无法使用 Django restframework 将最后一个插入的_id 从父序列化程序传递给子序列化程序
- angular - Angular 4 动画下拉菜单
- loops - 和组合中的无限循环
- git - Git与master合并而不签出到master
- javascript - OpenTok - 如何在 sessionDisconnected 上手动重新连接而不会产生延迟连接
- ms-access-2013 - 为什么我的 Dlookup 函数出现类型错误
- github - GitHub 快照存档的地方(源代码)
- java - `Object` 方法中延迟加载的实体:`toString`、`equals` 和 `hashCode`
- mysql - 按总价值和交易总数查找顶级支付类型
- sql-server - 对创建的变量使用 Where 语句