我的对象总是“在那里”吗?

时间:2009-12-01 21:02:25

标签: .net garbage-collection

如果我有一个存储在内存中的对象,并且我离开我的应用程序一小时,当我回来时,该对象是否仍然存在?

换句话说,.NET垃圾收集器是否会抛弃我的对象,因为它已经使用了一段时间?

3 个答案:

答案 0 :(得分:11)

垃圾收集器仅收集应用程序中不再引用的对象。垃圾收集器永远不会收集正在使用的任何对象。

垃圾收集器对“正在使用”的定义基于根。如果AppDomain中的其他对象实例引用它,则对象实例具有根。只要托管应用程序的AppDomain未卸载,内存中的所有对象实例都将保留在内存中,只要它们在应用程序中保留根目录即可。

答案 1 :(得分:4)

只要有引用您的对象的内容,垃圾收集器就不会收集它。因此,如果在类中创建静态字段并为其指定对象的引用,只要没有对该字段的其他赋值,并且只要加载AppDomain(通常是只要进程正在运行)。

答案 2 :(得分:3)

+1 @ Andrew的答案 - 然而 - 你的应用程序内存可以进入虚拟内存(在DISK上)所以当你访问该对象时,它需要一点时间才能得到它,但它最终会在那里