我刚开始学习 C#(来自 Java 和 C++ 背景),我有一个关于手动垃圾处理的问题:是否有可能在 C# 中手动销毁对象?我知道 IDisposable
接口(interface),但假设我正在处理一个我没有编写并且没有实现它的类?它不会有 .Dispose()
方法,所以 using { }
已经过时了,.Finalize
总是 protected
或 private
所以这也不是一个选项。
(在这种情况下,我只是想了解 C# 中的可能。我想如果所有其他方法都失败了,我可以继承假设的 ImNotDisposable
类,以便它确实实现 IDisposable。)
最佳答案
您无需手动销毁 .Net 对象。这就是托管环境的意义所在。
事实上,如果对象实际上是可达的,这意味着您有一个引用可以用来告诉 GC 您想要销毁哪个对象,那么收集该对象将是不可能的。 GC 将永远不会 收集任何仍然可以访问的对象。
您可以做的是调用 GC.Collect()
来强制进行常规收集。然而,这几乎不是一个好主意。
相反,最好假装任何不使用非托管资源并且程序中任何其他对象都无法访问的对象会立即被销毁。我知道这不会发生,但在这一点上,该对象就像其他任何对象一样只是一 block 内存;你不能回收它,它最终会被收集起来,所以它对你来说也可能已经死了。
关于 IDisposable
的最后一点说明。您应该只将它用于包装非托管 资源的类型:诸如套接字、数据库连接、gdi 对象等,以及偶尔的事件/委托(delegate)订阅。
关于c# - 手动销毁 C# 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1987251/