【发布时间】:2016-03-26 05:42:11
【问题描述】:
假设我有一个程序,例如单击按钮。
然后我创建了一个 Graphics 对象。
显然我应该处理掉它,例如
using(Graphics gr__=this.CreateGraphics()) {
}
或者在 try-catch-finally 的 finally 中调用 .Dispose()。
但考虑到程序很快就会结束。
假设我在过程的本地创建它(不是全局的,不是在使用中)。但在程序本地。
那么肯定和其他任何变量一样,它会在程序完成时自动处理掉,不是吗?
那么为什么手动/显式处理它对我来说很重要?
为什么我不能让它像任何其他变量一样自动进行垃圾收集?
当然它可能比'int'大一点,但它可能仍然很小,并且不会在内存中很长时间,因为无论如何过程结束得如此之快。甚至可能在使用完成或调用Dispose() 之后,过程就结束了,因此如果变量是过程的本地变量,我想它会被处理掉。那么,为什么还要为Dispose()/using 的显式垃圾收集而烦恼呢?
【问题讨论】:
-
看起来'int'没有被垃圾回收,但是在它声明的过程完成后,其他一些内存管理会处理它。垃圾收集有时会运行,但可能不会在程序完成时运行。我认为当 C 中有指针或引用时,当你使用 malloc 时,它适用。你会释放它,这是垃圾收集,但你不会这样做一个'int;。 IDisposable 对象可能是某种不同类型的东西,需要某种不同形式的垃圾回收。
标签: c# .net winforms memory idisposable