C# 列表中的对象生命周期。在C中添加(T\u元素)

C# 列表中的对象生命周期。在C中添加(T\u元素),c#,list,add,C#,List,Add,我知道add函数实际上只添加object\u元素的引用。我的问题是,如果我的列表是一个全局列表,我在一个函数中使用add函数,那么_元素也是局部的。即使在我退出thst函数之后,声明的_元素仍然在堆上,直到全局列表失效为止,这是真的吗 谢谢。是的,引用指向的对象现在将保持活动状态。更一般地说,对象几乎总是比创建它们的代码寿命长,因为常规GC是不确定的。这部分是正确的。只要元素是引用(对它的弱引用除外),它们就会留在堆上。如果列表在您声明时已失效或元素已删除。元素将从堆中移除,但不会立即移除 即使

我知道add函数实际上只添加object\u元素的引用。我的问题是,如果我的列表是一个全局列表,我在一个函数中使用add函数,那么_元素也是局部的。即使在我退出thst函数之后,声明的_元素仍然在堆上,直到全局列表失效为止,这是真的吗


谢谢。

是的,引用指向的对象现在将保持活动状态。更一般地说,对象几乎总是比创建它们的代码寿命长,因为常规GC是不确定的。

这部分是正确的。只要元素是引用(对它的弱引用除外),它们就会留在堆上。如果列表在您声明时已失效或元素已删除。元素将从堆中移除,但不会立即移除

即使不再存在引用元素的引用,我们仍然必须等待垃圾收集来清理它。元素有可能在垃圾收集器中移动到更高的一代,因此即使是第一级垃圾收集也不会将元素从堆中移除


NET中的垃圾收集是一项繁重的工作,我建议您阅读以了解更多信息

是的,尽管对象一直保存在该列表中,但它们所保存的内存不会被GC回收。如果您希望GC收集静态或长期收集中的对象,您可能有兴趣查看。

作为旁注:全局列表几乎总是一个坏主意,如果您确实有全局列表,您需要非常小心地同步对它的访问