假设您有一个使用 WPF 开发的应用程序,当您运行该应用程序并将其最小化时,过了一段时间(比如说 30 分钟或更长时间),当您恢复应用程序的窗口时,您发现它被冻结(或缓慢)了一段时间几秒钟。
我的问题是为什么它变慢了,有什么办法可以解决吗?
这不是 WPF 的属性,它是虚拟内存的属性。
基本上,现代操作系统试图让程序运行得尽可能快——但它们也允许许多程序同时运行,而不是它们的所有内存一次都可以放入你微不足道的 RAM 中。因此,当操作系统看到一个正在运行的程序需要分配一个新的内存页面,但 RAM 已经满了页面时,它会将其中一个页面(首选一段时间未使用的页面)踢到硬盘上,进入称为页面文件的文件。
当该内存页面所属的程序尝试访问它时,这称为“页面错误” - 操作系统检测到该页面不在 RAM 中而是在磁盘上,并且必须在继续执行之前将其读入 RAM。这相对较慢,因为从硬盘读取比从 RAM 读取慢。如果一个程序已经有一段时间没有运行了,可以想象它的所有页面都已经被调出到 RAM 中——所以它会很慢,直到它停止遇到页面错误。
我对如何处理此问题没有经验,但您可以尝试以下操作:
1)编写程序以异步方式运行 - 因此,当一个线程正在执行触发页面错误的操作时,该程序会在其他线程上响应
2)故意触摸内存的每一页以将其全部分页(仅当您的程序非常重要以至于它应该一直占用 RAM 时才推荐使用,即使不使用时也是如此!)
3)“扔硬件”解决方案 - 购买更多 RAM :)