c# - 为什么我的 WPF 应用程序在最小化一段时间后变得很慢?

标签 c# wpf windows

假设您有一个使用 WPF 开发的应用程序,当您运行该应用程序并将其最小化时,经过一段时间(假设 30 分钟或更长时间),当您恢复应用程序的窗口时,您发现它被卡住(或缓慢) )几秒钟。

我的问题是为什么它变得很慢,有什么方法可以解决它吗?

最佳答案

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

基本上,现代操作系统试图让程序运行得尽可能快 - 但它们也允许许多程序同时运行,而它们的所有内存都无法一次装入您那可怜的 RAM。因此,当操作系统发现正在运行的程序需要分配新的内存页面,但 RAM 已满页面时,它会将其中一个页面(最好是一段时间未使用的页面)踢到硬盘上,一个称为页面文件的文件。

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

我对如何处理这个问题没有经验,但你可以尝试以下方法:

1) 编写程序以异步方式运行 - 因此,当一个线程执行触发页面错误的操作时,程序会在其他线程上做出响应

2) 故意触及内存的每一页,以将其全部分页(仅当您的程序非常重要以至于值得一直占用 RAM,即使不使用时才推荐!)

3)“扔硬件”解决方案 - 购买更多 RAM :)

关于c# - 为什么我的 WPF 应用程序在最小化一段时间后变得很慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15466776/

相关文章:

c# - 有没有办法遍历我的sql结果并将某些名称/值对存储在C#中的其他位置?

c# - 从子 ViewModel 到父 ViewModel 的属性返回值

wpf - 为什么 WPF Grid.Rows 是从零开始的,而不是相对的?

windows - 有没有办法让 AutoIt 的 WinWaitActive 关心窗口是否可见

c# - 用于测试的公共(public)事件目录

c# - Xpath 选择所有不带 id=x 表的 tr

c# - 如何确定文件夹是否嵌套在 SharePoint 列表中

wpf - 强制三态复选框不移动到不确定状态

c# - 如何让 Windows 打印文档?

java - 在 Java 中查找所有驱动器号