Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF控制不释放内存_Wpf_Memory_Garbage Collection - Fatal编程技术网

WPF控制不释放内存

WPF控制不释放内存,wpf,memory,garbage-collection,Wpf,Memory,Garbage Collection,我在一个小WPF应用程序中有一个奇怪的行为。我在一个窗口上有一个按钮,它以对话框的形式打开另一个窗口,其中有几个动态添加的控件。在这样做的同时,我会密切关注它的内存使用情况(sysinternalprocexp)。但当我关闭该窗口时,内存使用情况不会恢复。我建议使用此工具 我在WPF和win表格中有过类似的经历。 它可能不会像之前建议的那样被处理,但memprofiler会准确地向您展示它是什么,并使找到解决方案变得非常容易。当系统内存不低时,将内存释放回操作系统不符合GC的利益,因此,应用程序

我在一个小WPF应用程序中有一个奇怪的行为。我在一个窗口上有一个按钮,它以对话框的形式打开另一个窗口,其中有几个动态添加的控件。在这样做的同时,我会密切关注它的内存使用情况(sysinternalprocexp)。但当我关闭该窗口时,内存使用情况不会恢复。

我建议使用此工具 我在WPF和win表格中有过类似的经历。
它可能不会像之前建议的那样被处理,但memprofiler会准确地向您展示它是什么,并使找到解决方案变得非常容易。

当系统内存不低时,将内存释放回操作系统不符合GC的利益,因此,应用程序内存使用的外部度量并不能准确反映实际消耗的内存量。为此,您需要获得特定于.NET的内存分析工具,但我已尝试显式调用GC.Collect,这样即使不需要释放内存,垃圾收集器也会运行。这没有什么区别。很可能有些东西没有被处理。@Akif,强制收集可能会释放托管堆上的内存,但没有必要将分配给托管堆的内存释放回操作系统。只要系统内存不低,GC保留已分配给堆的内存是有意义的。@Dan Bryant您的说法似乎合乎逻辑。当我关闭最后一个打开的窗口,然后重新打开它时,会调用以前打开的窗口的析构函数。这证明了GC在认为应该释放一些内存时运行,因为创建的对象需要更多内存。如何确保在UI上关闭的对象立即被GC收集。