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