![如何快速从页面文件加载整个程序?](https://linux22.com/image/1379628/%E5%A6%82%E4%BD%95%E5%BF%AB%E9%80%9F%E4%BB%8E%E9%A1%B5%E9%9D%A2%E6%96%87%E4%BB%B6%E5%8A%A0%E8%BD%BD%E6%95%B4%E4%B8%AA%E7%A8%8B%E5%BA%8F%EF%BC%9F.png)
有时我几天不使用某些内存使用率较高的程序(例如具有 2 GB 内存的虚拟机)。当我返回时,它的内存大部分都交换到了 HDD 上。当我稍后尝试使用该程序时,它加载速度非常慢。例如,它的物理内存使用率从 600 MB 上升到 1100 MB,速度为 250 KB/s,之后它才变得相当灵敏。因此,速度变慢是因为数据是非连续读取的。
是否可以通过一次连续的硬盘读取来加载程序的内存?因为这只需要半分钟的时间。
这是一台工作机器,操作系统 Windows 7 x64,RAM 大小为 8 GB。
答案1
您应该使页面文件具有静态大小,这样它就不会碎片化并简化硬盘读取。
下面显示了静态大小页面文件的一个示例。
答案2
您无法直接更改内存与磁盘的交换方式,因为它交换的是页面而不是程序。您可以通过以下方式加快速度:
- 按照 UNIX 方式操作。在磁盘开头创建一个小分区来保存交换文件。
- 限制交换文件的大小变化。
- 安装一个好的碎片整理应用程序。
没有人可以干扰交换。要干扰交换,您需要拥有最大权限,因为交换可能包含任何重要数据,如密钥或密码。即使您有权访问交换,您也可以自己读取它,但这不会给您带来任何提升,因为交换不受缓存的影响,因此读取任何页面只会加载您的驱动器而不会加快任何速度。
还有其他解决方案,例如避免使用 swap进程/应用程序检查点。Linux 和 BSD 可以做到这一点。有些系统可以像 DragonflyBSD 一样自然地做到这一点,因为它们具有内存管理和运行时对象链接可能性。但是我怀疑在 Windows 上这样做的可能性,您可以寻找类似这(跳过有关信号的垃圾,它们对检查站没有任何作用)。