首页 > 解决方案 > 垃圾收集器 - 我声明静态列表时的行为

问题描述

我有一个重要的问题要问你。我以这种方式声明了私有静态列表

private static List<structType> myList = new List<structType>();

我的应用程序一直在工作,我想知道当 GC 工作时这个列表会是什么。我在特定服务中将数据添加到此列表中,然后将其保留了几分钟,然后将其删除。当然,这些数据保留在特定的服务中,并且在服务之后我删除了这些数据。

我正在寻找信息它将如何表现垃圾收集器,因为我不想提前删除这些数据并失去对这个列表的引用。

我不确定我是否很好理解行为 GC,如果您有任何信息,请分享。

谢谢 :)

我知道我的解决方案不好,但有时我需要保留可能已执行其他服务的特定信息。这种方式涉及到一个具体的案例。

标签: c#

解决方案


静态字段是 GC 根,所以:

  • 该列表在应用程序的整个生命周期内都是可访问的(通过静态字段)
  • 这意味着列表后面的数组是可访问的
  • 值类型直接存在于数组中

所以:没什么好担心的(除了线程安全,但这是一个单独的问题)


作为一般规则:如果您甚至可以注意到它已被收集:它无法被收集。这不包括通过“终结器”间接注意,以及任何涉及WeakReference.


推荐阅读