【发布时间】:2009-05-14 15:19:14
【问题描述】:
在 .Net 中,假设我实例化了一个启动异步进程的对象(在其方法之一上使用 Delegate.BeginInvoke),然后通过将对象的引用设置为 null 或允许它超出范围来放弃该对象。垃圾收集器会在异步过程进行时尝试收集对象吗?如果不是,是什么阻止它收集对象?
【问题讨论】:
标签: .net asynchronous garbage-collection
在 .Net 中,假设我实例化了一个启动异步进程的对象(在其方法之一上使用 Delegate.BeginInvoke),然后通过将对象的引用设置为 null 或允许它超出范围来放弃该对象。垃圾收集器会在异步过程进行时尝试收集对象吗?如果不是,是什么阻止它收集对象?
【问题讨论】:
标签: .net asynchronous garbage-collection
如果您处于完全托管的代码中,则不会收集。
您要触发的委托是对象的一部分(根据您的描述)。只要它在运行,就会有对该对象的活动引用。一旦委托完成,该对象将成为收集的候选对象。
但是,如果您在委托中调用本机代码,则在某些情况下,对象实际上可以在本机代码完成之前完成。详情请见MSDN forum thread。
【讨论】: