2010-11-16 81 views

回答

3

那么简单的答案是他们实施'IDisposable',所以他们需要处置。

稍长的答案是它们消耗需要释放的非托管资源。通过直接调用dispose(或使用'using'语句),您可以释放这些资源,而不是等GC为您完成。

+0

似乎我的问题是错误的。它应该是托管和非托管资源。这就是为什么我不能在谷歌找到它。 :) – Rye 2010-11-16 04:12:55

+0

是啊谷歌是真棒,除非你不能找出正确的关键字来触发一些体面的结果。 – 2010-11-16 04:15:42

+0

感谢您的解释。 – Rye 2010-11-16 04:18:22

3

这些对象是非托管资源(特别是GDI +对象)的包装。如果这些对象没有明确处理,那么GC需要调用它们的终结器。这将延迟为其他GC回收资源。*这意味着您的应用程序将使用更多的资源。

更新:澄清的措词加上... *当GC遇到带终结器的对象时 - 假定GC.SuppressFinalize()尚未在Dispose()方法中调用 - 它将终结器排队以运行在未来某个时间在终结者线程上。对象所使用的内存和资源因此保持到至少在当前运行的GC之后。

+0

如果我没有使用dipose方法怎么办?有没有某种内存泄漏? – Rye 2010-11-16 04:00:49

+0

凯文你的答案似乎表示,如果你明确地处理对象,应用程序将使用比必要的更多的资源。那是你真正想说的吗? – 2010-11-16 04:00:59

+0

@Rye。不,没有内存泄漏。 GC将最终发布非托管资源。直到fReachable处理完成才会发生。这比对象的范围长。 – 2010-11-16 04:02:25