如果我替换PictureBox控件中的图像,我应该首先处理原始图像吗?.Net Winforms

Jul*_*les 8 .net c# vb.net idisposable winforms

根据我的问题,如果我替换图片框中的图像,我应该首先处理原始图像吗?

或者,这种情况怎么样:

Dim bm As New Bitmap(32,32)  
bm = New Bitmap(32,32)  
bm = New Bitmap(32,32)  
bm = New Bitmap(32,32)  
Run Code Online (Sandbox Code Playgroud)

是否bm只需要在最后处置,还是应该在每次重新创建之前处置?


谢谢大家的答案.在我身上有一个很大的疏忽.我知道一个控制部门负责处理它的孩子,但我没有想到如果我更换它,我应该处理一个旧图像.

kem*_*002 5

是的,您应该在同一变量之上创建新图像之前处置旧对象.通过使用相同变量创建新图像,您将删除对它的引用.如果没有对旧对象的引用,则表示它应该由GC(垃圾收集器)拾取.虽然从技术上讲,这"应该"最终导致内存被释放,假设终结器确保非托管资源得到处理,这是一个很大的假设(你甚至不能真的假设将调用终结器) ,它会为系统带来更多的工作.非默认终结器会在垃圾收集级别提升方面为GC带来额外的工作,导致释放内存需要更长的时间,以及GC必须运行的次数.

这是假设所有写入都是为了确保终结器处理它.每当一个对象具有Dispose方法(任何其实现IDisposable其中BitMap的那样),它应该被称为物体去除引用之前(脱落的范围内,除去参照对象等).

这是一篇关于垃圾收集器如何在.net中工作的文章

http://www.devx.com/dotnet/Article/33167

以下是MS如何实施dispose/finalizer:

http://msdn.microsoft.com/en-us/library/b1yfkh5e.aspx