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只需要在最后处置,还是应该在每次重新创建之前处置?
谢谢大家的答案.在我身上有一个很大的疏忽.我知道一个控制部门负责处理它的孩子,但我没有想到如果我更换它,我应该处理一个旧图像.
是的,您应该在同一变量之上创建新图像之前处置旧对象.通过使用相同变量创建新图像,您将删除对它的引用.如果没有对旧对象的引用,则表示它应该由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