-3

由于垃圾收集无法清除非托管代码。要清除非托管代码,我们使用 dispose 方法,但反之亦然?我们可以使用 dispose 方法清除管理代码对象吗?

4

2 回答 2

4

方法Dispose实现可能会将某些字段设置为null,从而可能使“子”对象符合垃圾回收条件,即使包含对象本身不符合垃圾回收条件。

但它不能强行删除对象——最接近的方法是调用GC.Collect.

Dispose当然,根本不需要清除字段 - 例如,使用,即使在处理它之后MemoryStream,您也可以访问流中的数据(通过ToArray或)。GetBuffer

通常最好(IMO)让垃圾收集器继续它擅长的事情。

于 2013-07-12T16:49:57.277 回答
0

如果您确实需要强制执行此操作 - 您可以在您的类上实现 IDisposable ,然后在using(){}它超出范围时在一个块中使用它,它将在下一个周期被清理GC.Collect,这可以通过调用该方法来强制执行。

于 2013-07-12T16:59:26.813 回答