c# - 为什么要处置一个肯定会很快被处置的物体?

原文 标签 c# .net winforms memory idisposable

假设我有一个程序,例如一个按钮点击。
我创建了一个图形对象。
显然我应该把它处理掉。

using(Graphics gr__=this.CreateGraphics())  {

} 

或者在try catch的.Dispose()中调用finally
但考虑到手术会很快结束。
假设我在过程的本地创建它(不是全局的,不是在using中)。只是程序上的局部问题。
当然,和其他变量一样,当过程完成时,它会被自动释放,不是吗?
那么为什么手动/显式地处理它对我来说很重要呢?
为什么我不能像其他变量一样让它自动回收垃圾?
当然,它可能比“in t”大一点,但它可能仍然很小,而且不会在内存中保留很长时间,因为过程结束得太快了。甚至可能在使用完成或调用Dispose()之后,过程就结束了,因此我认为如果变量是过程的本地变量,它就会被释放。那么,为什么要麻烦显式地收集Dispose()/using

最佳答案

< AQ> GDI+是基于C++的,并产生对非托管对象的引用。因此,处理System.Drawing命名空间的可丢弃对象非常重要,因为垃圾收集器不会自动处理未损坏的对象。这些对象可能包含完成此工作的终结器;但是,您无法控制何时执行这些终结器。同时,挂起的终结器也在混乱堆。因此,最好显式或通过Dispose()-语句调用using

相关文章:

c# - 从MembershipUser继承-Asp.net/C#

c# - 如何在C#中仅显示小数点后2个空格

c# - 从列表C#中删除第一个对象

.net - 开发人员机器证明

c# - 构建环境CodeAnalysis任务无法实例化

c# - 将GUI添加到Visual Studio中的现有代码

c# - 使用CaSTLe的自定义成员(member)提供程序中的属性注入(inject)

c# - 如何在其所在的计算机上运行控制台应用程序?

.net - 如何显示ListViewItem的全行突出显示?

c# - 如何重塑表格?