手动销毁C#对象
手动销毁C#对象
我还是个学习C#的新手(有Java和C++背景),我有一个关于手动垃圾回收的问题:在C#中手动销毁对象是否可能?我知道有IDisposable
接口,但是假设我正在处理一个由我没有编写,也不实现IDisposable
接口的类呢?它不会有一个.Dispose()
方法,因此,using {}
也行不通,而.Finalize
始终是protected
或private
,所以也不是一个选项。
(在这种情况下,我只是想了解在C#中有哪些可能性。我想,如果其他方法都失败了,我可以继承假设的ImNotDisposable
类,以便它可以实现IDisposable。)
admin 更改状态以发布 2023年5月23日
你不需要手动销毁 .Net 对象。这就是所谓的受管理环境的含义。
实际上,如果对象是可到达的,这意味着你有一个引用,你可以用它来告诉 GC 你想要销毁哪个对象,那么收集该对象就是不可能的。GC 将永远不会收集任何仍然可到达的对象。
你可以调用 GC.Collect()
来强制进行一般的垃圾回收。但是,这几乎从来不是一个好主意。
相反,也许更好的方法是假装任何不使用非托管资源且在程序中没有被任何其他对象访问到的对象立即被销毁。我知道这不是真的发生了,但是在这一点上,该对象仅仅是像任何其他内存块一样的东西;你无法重新获取它,并且它最终将被回收,所以它可能只是对你无用。
关于 IDisposable
的最后一点提示。你应该只对包装非托管资源的类型使用它:像套接字,数据库连接,GDI 对象等以及偶尔的事件/委托订阅。