正如一些人可能知道的,我最近在我的网站上发布了关于高内存使用率的帖子,我有一个想法,我的缩略图可能与此有关,因为当实例被使用时,由于我对它的工作原理的误解,我没有积极地处理它。
我现在正在看我的缩略图的代码,我想要一些关于什么时候需要处理的建议,是不是只有当你创建一个新的对象实例时才需要处理?
像这样:
Target := System.Drawing.Bitmap.Create(Trunc(Width), Trunc(Height));
MyImage := Target.FromFile(PhotoPath);因此,我的问题是,我是否需要同时处理Target和MyImage,以确保GC正确执行它所需的操作?
谢谢。
发布于 2010-08-05 22:33:49
请查看MSDN上的这篇博客文章:.NET Memory Leak: To dispose or not to dispose, that’s the 1 GB question。这个建议似乎是你应该处理掉。
发布于 2010-08-05 22:30:41
作为一般政策,我会把这个问题颠倒过来:
有什么理由我不应该处理这些特定的对象吗
如果类实现了IDisposable,那么您的工作就是处理它。
在很多情况下,当你处理对象时,它不会做太多的事情,但这并不意味着你不应该对它调用dispose。如果您曾经升级到新的.NET运行时版本,情况可能会发生变化。
好的,让我来澄清一下我在这里说的话。
当然,我并不是说您应该在任何和所有实现IDisposable的对象上调用Dispose。问题是,它是你的目标吗。如果你构建了它,那就是你的责任。
如果你得到了这个对象,假设它不是你的,除非你特别需要这个对象,而不是暂时借给你。
当然也有其他的例外,但作为一般规则,你拥有的实现IDisposable的对象,在你完成的时候处理掉它们。
发布于 2010-08-05 22:53:31
Image实现了disposable。当你处理完它时,你应该处理它。对于图像,处理它们是非常重要的。它们只分配了几个字节的托管内存,但引用了一大块本机内存。
https://stackoverflow.com/questions/3415693
复制相似问题