假设我有一个程序,例如单击按钮。
然后我创建了一个 Graphics 对象。
显然我应该处理掉它,例如
using(Graphics gr__=this.CreateGraphics()) {
}
或在 try-catch-finally 的 finally
中调用 .Dispose()
。
但考虑到手术很快就会结束。
假设我在程序本地创建它(不是全局的,不是在使用中)。但是在程序的本地。
然后肯定像任何其他变量一样,它会在过程完成时自动处理,不是吗?
那么为什么手动/显式处理它对我来说很重要?
为什么我不能让它像任何其他变量一样自动进行垃圾收集?
当然,它可能比“int”大一点,但它可能仍然很小并且不会在内存中保存很长时间,因为无论如何该过程结束得如此之快。甚至可能是在使用完成或 Dispose()
被调用后,过程结束,因此我想它会被释放,如果变量是过程的本地变量。那么,为什么要为 Dispose()
/using
的显式垃圾收集而烦恼呢?
最佳答案
The Microsoft .NET class library provides a managed interface for GDI+ via the System.Drawing namespace. GDI+ 基于 C++,并产生对非托管对象的引用。因此,处理 System.Drawing 命名空间的一次性对象很重要,因为垃圾收集器不会自动处理非托管对象。这些对象可能包含完成这项工作的终结器;但是,您无法控制何时执行这些终结器。挂起的终结器也使堆变得困惑。因此,最好显式调用 Dispose()
或通过 using
语句调用。
关于c# - 为什么要处理一个肯定会很快被处理掉的对象呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34373828/