首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.Drawing和垃圾收集

System.Drawing和垃圾收集
EN

Stack Overflow用户
提问于 2010-08-05 22:27:07
回答 5查看 612关注 0票数 3

正如一些人可能知道的,我最近在我的网站上发布了关于高内存使用率的帖子,我有一个想法,我的缩略图可能与此有关,因为当实例被使用时,由于我对它的工作原理的误解,我没有积极地处理它。

我现在正在看我的缩略图的代码,我想要一些关于什么时候需要处理的建议,是不是只有当你创建一个新的对象实例时才需要处理?

像这样:

代码语言:javascript
复制
Target := System.Drawing.Bitmap.Create(Trunc(Width), Trunc(Height));
MyImage := Target.FromFile(PhotoPath);

因此,我的问题是,我是否需要同时处理Target和MyImage,以确保GC正确执行它所需的操作?

谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-08-05 22:33:49

请查看MSDN上的这篇博客文章:.NET Memory Leak: To dispose or not to dispose, that’s the 1 GB question。这个建议似乎是你应该处理掉。

票数 6
EN

Stack Overflow用户

发布于 2010-08-05 22:30:41

作为一般政策,我会把这个问题颠倒过来:

有什么理由我不应该处理这些特定的对象吗

如果类实现了IDisposable,那么您的工作就是处理它。

在很多情况下,当你处理对象时,它不会做太多的事情,但这并不意味着你不应该对它调用dispose。如果您曾经升级到新的.NET运行时版本,情况可能会发生变化。

好的,让我来澄清一下我在这里说的话。

当然,我并不是说您应该在任何和所有实现IDisposable的对象上调用Dispose。问题是,它是你的目标吗。如果你构建了它,那就是你的责任。

如果你得到了这个对象,假设它不是你的,除非你特别需要这个对象,而不是暂时借给你。

当然也有其他的例外,但作为一般规则,你拥有的实现IDisposable的对象,在你完成的时候处理掉它们。

票数 4
EN

Stack Overflow用户

发布于 2010-08-05 22:53:31

Image实现了disposable。当你处理完它时,你应该处理它。对于图像,处理它们是非常重要的。它们只分配了几个字节的托管内存,但引用了一大块本机内存。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3415693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档