【发布时间】:2015-06-15 13:05:15
【问题描述】:
GC 运行后是瞬时的吗?
我在运行我正在处理的应用程序时使用 perfmon 监控内存(可用 MBytes)。当我加载文件时,我可以看到可用 MBytes 按预期下降,但当我关闭它们时它并没有回升,所以我想知道我是否没有正确处理,或者是否还有其他影响这一点的东西。
加载文件时:
- 内容存储在某些对象中
- 创建了一个新的 UserControl 实例
- 创建了一个新的 TabPage
- UserControl 已添加到 TabPage
- TabPage 被添加到 TabControl
阅读 SO,我发现可能导致内存泄漏的最常见的事情之一不是取消订阅事件处理程序,因此我确保我在 UserControl 的 dispose 方法中做到了这一点。我订阅了 TabControl 的“RemovingTab”事件,但 TabPages 本身没有附加的处理程序。
关闭文件时,我删除对象的存储实例并在 UserControl 和 TabPage 上调用 dispose。我尝试运行 CLR 分析器(我没有任何经验),它说没有运行 GC。
【问题讨论】:
-
"...它说没有 GC 运行"。这就是你的答案。 GC 在需要时运行。您不太可能有内存泄漏。
-
内存在 GC 运行时可用。如果 GC 没有理由运行,则它不会运行。如果您愿意,可以使用
GC.Collect()手动运行 GC。
标签: c# winforms user-controls garbage-collection