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