3

我有一个类,它有一个static List<T>字段,里面有我所有的对象;每个对象代表一个正在运行的进程及其属性。

在进程完成其工作后,相关对象将从 中删除List<T>,然后我的 UI 会更新。

从我的列表中删除对象后,我应该将此对象更改null为释放资源吗?

4

4 回答 4

10

从列表中删除对象后,该对象仍然存在,但如果没有对该对象进行引用,垃圾收集器将清理它,您不必担心

于 2013-10-04T18:15:32.543 回答
8

C# 是垃圾收集的,因此无论哪种方式,内存都会得到处理。

于 2013-10-04T18:15:20.433 回答
5

从列表中删除该对象的那一刻,该对象将超出范围并且有资格进行 GC..


事件方面:

即使该对象具有其他对象订阅的某些事件,它仍然可以用于 GC。

所以,它是一种单向关系

Broadcaster -> Subscribers

如果Broadcaster超出范围,即使它有订阅者,它也有资格获得 GC。

Broadcaster会阻止GCSubscribers

看看事件处理程序是否会阻止垃圾收集的发生?

于 2013-10-04T18:24:20.380 回答
3

简而言之,没有。

一旦引用超出范围,垃圾收集器将摆脱对它的对象/引用。这也可以使用 using(如果对象实现IDisposable)关键字来处理。基本上,不要将其设置为null并让 C# 中的清理机制为您处理工作。

于 2013-10-04T18:18:42.980 回答