为什么我的WPF应用程序在经过一段时间后变慢?

假设您有一个使用WPF开发的应用程序,当您运行应用程序并在一段时间后(例如30分钟或更长时间)最小化应用程序时,当您恢复应用程序的窗口时,发现它冻结(或缓慢)几秒钟。

我的问题是为什么它变得缓慢,有什么办法解决它?

这不是WPF的属性,它是虚拟内存的属性。

基本上,现代操作系统试图使运行的程序尽可能快地运行 – 但是它们也允许许多程序一次运行,它们的所有内存都可以一次装入你的内存中。 所以当操作系统看到一个正在运行的程序需要分配一个新的内存页,而RAM已经满了页时,它会将其中一个页面(喜欢那些没有被使用的页面)踢到硬盘上一个叫做页面文件的文件。

当内存页面所属的程序试图访问它时,这被称为“页面错误” – 操作系统检测到页面不在RAM中,而是在磁盘上,并且在继续执行之前必须将其读取到RAM中。 由于从硬盘读取比从RAM读取慢,这是相对较慢的。 如果某个程序没有运行一段时间,可以想象所有的页面都已经被分页到RAM中 – 所以它会很慢,直到停止页面错误。

我没有遇到如何处理这个问题,但你可以尝试像这样的事情:

1)编写程序以异步的方式工作 – 所以当一个线程正在做触发页面错误的事情时,程序会在其他线程上响应

2)有意识地触摸你的记忆的每一页,以保持所有页面(只有当你的程序非常重要,以至于它总是占用RAM,即使在不使用的时候也是如此)!

3)“抛硬件”解决方案 – 购买更多的内存:)