WPF应用程序在注销时不释放内存

时间:2011-06-22 19:54:57

标签: wpf memory

我正在开发一个WPF应用程序,它在登出屏幕时似乎不会释放所有内存。在应用程序启动时,有一个登录屏幕,我输入userID / Pwd。它需要一个不同的屏幕(比如说WPF2)。此时,我完全卸载了登录界面(内存现在为70MB)。当WPF2屏幕加载时,动态内存最高可达200​​MB。当用户从WPF2注销时,再次加载登录屏幕。此时,我正在清除在dispose方法中WPF2中使用的所有对象。但是内存仍然是200MB而不是70MB,而且当我再次登录时它会从那里增加。

关闭应用程序后,将释放所有使用的内存。

我理解这是一个非常具体的应用问题,但任何一般性的想法都受到高度赞赏。

由于

3 个答案:

答案 0 :(得分:1)

当事件处理程序仍然附加到它们时,或者当应用程序关闭时,项目不会从内存中释放。

这听起来像你有一些事件处理程序要清理。

希望这有助于,

答案 1 :(得分:0)

您没有提供有关如何获取内存值的足够信息。我假设你看过任务经理?如果只查看任务管理器,您可能无法获得预期的值。此外,在不再使用对象的时刻不进行内存释放。这是垃圾收集完成的异步任务。如果要在特定时间点测量内存,可能应该强制GC释放内存(但仅用于测量,而不是用于生产代码)。查看this线程以获得有关不同内存类型的起点。

Here你找到了一个非常好的视频,它开始调试WPF中的内存问题。

答案 2 :(得分:0)

当您在Dispose()上致电IDisposable时,您可以清除非托管资源。 垃圾收集器可能尚未收集WPF2。