常见对话框组件需要被释放吗?

3
在这个与对话框相关的 MSDN 示例中,没有使用代码块或Dispose方法。但是,为什么它没有被处理,尽管它有Dispose方法呢?

1
在我看来,这似乎是一个糟糕的示例,应该进行处理...虽然这不是一个关键性缺陷,因为垃圾回收器应该会解决它。 - Sam Saffron
样本固定在2017年7月至2018年5月之间的某个时间点,参考链接为:July 2017May 2018 - Cœur
3个回答

2
很抱歉,这不是非常清晰的。 OpenFileDialog和相关类从Component类继承Dispose()方法。每个组件都必须实现Dispose()方法,因为窗体的Dispose()方法会调用它。恰好有几个派生自Component类的类有一个无作为的Dispose()方法。对话框类就是这样,它们是对话框。当对话框关闭时,它们会清理任何未受管控的资源。不需要额外的帮助。
这并没有很好地记录下来。MSDN库显示该方法是继承而来的,而不是被覆盖。这仍然不明显,绕过继承的Component.Dispose()方法是可以的(确实如此)。如果您感到不舒服,许多程序员都是这样的,那么请毫不犹豫地使用“using”语句进行包装。调用一个不做任何事情的Dispose()方法不会造成任何伤害。嗯,至少不会产生你能够衡量的伤害。

仅供参考,该样本固定在2017年7月至2018年5月之间的某个时间点。 - Cœur

0

它们的终结器最终将被垃圾回收器调用,由于它们不持有(许多)非托管资源(当然也没有像打开文件句柄之类的东西),因此它们没有为此而费心。

此外,您认为在应用程序的生命周期中通常会显示多少次文件对话框?


1
这实际上取决于应用程序的性质、它的工作方式以及用户如何使用它。有人可能会频繁地打开文件对话框。 - rossisdead
@rossisdead,当然,如果需要,您可以选择调用Dispose。但通常情况下,让它被垃圾回收应该已经足够了!(我敢打赌这就是Chrome内存泄漏问题最初的起因) - Blindy
我不太确定我同意。你永远不知道别人会如何使用它(例如,它被用于某个其他人无法访问代码的自定义控件中)。与其制造一个难以发现的错误,最好确保正确处理Dispose。 - rossisdead

0
垃圾收集器会在你没有显式调用Dispose()的情况下帮助你清理垃圾。
大多数情况下,你可以依赖垃圾收集器来完成这个工作,除非你非常注重每次建立后清除微小的内存使用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接