我正在开发一个WPF应用程序,它在登出屏幕时似乎不会释放所有内存。在应用程序启动时,有一个登录屏幕,我输入userID / Pwd。它需要一个不同的屏幕(比如说WPF2)。此时,我完全卸载了登录界面(内存现在为70MB)。当WPF2屏幕加载时,动态内存最高可达200MB。当用户从WPF2注销时,再次加载登录屏幕。此时,我正在清除在dispose方法中WPF2中使用的所有对象。但是内存仍然是200MB而不是70MB,而且当我再次登录时它会从那里增加。
关闭应用程序后,将释放所有使用的内存。
我理解这是一个非常具体的应用问题,但任何一般性的想法都受到高度赞赏。
由于
答案 0 :(得分:1)
当事件处理程序仍然附加到它们时,或者当应用程序关闭时,项目不会从内存中释放。
这听起来像你有一些事件处理程序要清理。
希望这有助于,
答案 1 :(得分:0)
您没有提供有关如何获取内存值的足够信息。我假设你看过任务经理?如果只查看任务管理器,您可能无法获得预期的值。此外,在不再使用对象的时刻不进行内存释放。这是垃圾收集完成的异步任务。如果要在特定时间点测量内存,可能应该强制GC释放内存(但仅用于测量,而不是用于生产代码)。查看this线程以获得有关不同内存类型的起点。
Here你找到了一个非常好的视频,它开始调试WPF中的内存问题。
答案 2 :(得分:0)
当您在Dispose()
上致电IDisposable
时,您可以清除非托管资源。