2015-04-22 1019 views
0

这个问题似乎与我的程序部分是分开的,我在WPF窗口中托管了Winform控件。在WPF/Winform应用程序中内存占用不断增加

向用户呈现X行数,并且可以单击任意行上的编辑以调出另一个窗口(< <这是其中包含Winform控件的窗口)。

每次进行新的选择并加载新的编辑窗口时,内存使用量将在1到4兆之间上升。我已经尝试了将该窗口关闭时所有可以放置的对象都设置为null,但它没有任何区别。

只有这个窗口会导致内存一直上升,永远不会回落。即使我关闭除主窗口以外的所有内存,内存占用仍保留在原来的位置。

+5

这可能发生的原因有很多。你是否根据需要分离事件处理程序?你正在处理一次性实例吗? –

+0

我正在处理Dispose()可用的东西。使用'= null'做一些其他的事情。确保事件处理程序分离的最佳方法是什么? – Justin

+0

Worm窗口关闭后垃圾收集器不一定会运行。只有在感觉需要时才会运行。你是否强制使用gc(例如使用PerfView)来查看内存是否下降? – user783836

回答

2

最简单的解决方案是在打开窗口之前和之后查看内存的内存快照,并查看分配了哪个新对象。例如,您可以使用内存分析器dotMemory来完成此操作。

此外,在dotMemory中,您可以自动查看哪些事件处理程序泄漏。

0

Alexey已经说过我会如何解决这个问题。对内存进行分析可以显示程序中的很多问题。

Microsoft提供了两个可用于此目的的工具。一个是CLR Profiler,另一个是Performance Analysis Tool,它也包含内存CLR内存信息。我会和这两位的前者一起去。

相关问题