我想减少缓存大小,因为我的磁盘速度很慢,而且运行的是无交换系统(这样速度会很快)。我有 x86 Vista 和 3 GB RAM。问题是 Windows 占用了大约 1 GB RAM 用于磁盘缓存(显示在任务管理器的“物理内存”->“缓存”下),只剩下 2 GB 用于应用程序。每次当 Windows 认为内存不足时,就会弹出一个非常烦人的弹出窗口,当然,当内存被使用时应用程序会崩溃。但缓存中仍有 1 GB!
我尝试过 AnalogX Cache Booster,但它没有任何作用,内存使用量保持不变,警告弹出窗口也处于相同的水平。
答案1
我有...无交换系统
我以前也是这么想的。后来我才知道,在微软 Windows 中,这是一个坏的想法,并且实际上可以伤害表现。
Windows 认为 RAM 更像是硬盘上的一个优化层。它不想等到你必须交换 RAM 后才将其分页/交换到磁盘。相反,Windows 希望你放入 RAM 中的任何内容已经被分页/交换。
这样,当 Windows 需要 RAM 用于其他用途时,它就可以直接使用它。此策略之所以有效,是因为它把(缓慢的)磁盘写入放在计算机压力较小的时间点,代价是应用程序加载速度稍慢,并且可能分页一些不需要的内容,而不是放在计算机压力较大且 RAM 不足的时间点。
当然,通过完全删除页面文件,您可能会认为可以两全其美。但是,Windows 中有大量代码是根据我刚才描述的性能模型进行优化的。您最好确保拥有至少与 RAM 一样多的交换空间。
答案2
默认情况下,Vista(及更高版本)x86 只允许 2 GB虚拟的每个进程的内存。如果某个应用程序需要更多内存,例如 3GB,您可以通过以下方式增加内存:
bcdedit /set IncreaseUserVa 3072
但是这只对与“大地址感知”标志链接的可执行文件有效。运行其他 exe 的进程仍将限制为 2 GB。
实际 RAM 是根据应用程序和系统需要分配的。
由于这似乎不是你的问题,因此为了优化内存的使用,可以首先在 Windows Vista 上禁用 SuperFetch:
Windows Vista 中的 SuperFetch 服务会将您最常使用的应用程序预加载到系统内存中。这可以使这些应用程序的启动速度更快,但对于系统调整者或游戏玩家来说,这可能是不受欢迎的行为。
其次,为了控制磁盘缓存大小,AnalogX CacheBooster是一个免费工具,据说可以调整硬盘缓存(我自己从未尝试过),但根据以下信息,我不确定它是否有帮助。
正如所述Windows Vista 内存调整指南,磁盘缓存参数驻留在注册表中:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\Memory Management
一些重要参数是:
禁用分页执行程序控制如何将非活动内核模式驱动程序和系统代码从 RAM 中释放出来并分页到页面文件。不幸的是,您没有页面文件,因此系统代码永远不会被换出。
大型系统缓存控制系统缓存的大小如下:
- 0(默认)分配标准大小的文件系统缓存(少于 10MB RAM)
- 1 允许使用大型文件系统缓存(最多为总 RAM 量减去 4MB!)
如果此值在您的例子中为零,则磁盘缓存已经尽可能小。如果您获得的性能不令人满意,那么您必须投资硬件:更多 RAM 或更快的硬盘。将 RAM 从 3GB 增加到 4GB 只会增加 (1GB - 视频内存),除非您也升级到 64 位版本的 Windows。
答案3
每次当 Windows 认为内存不足时就会弹出一个非常烦人的弹出窗口,当然,当内存使用时应用程序就会崩溃。
此弹出窗口与 RAM 无关,也与 Windows 的缓存无关。这意味着您已超出提交限制。这是您的进程可以分配的私有虚拟地址空间的限制。
有三种方法可以增加提交限制:1) 一次运行更少或更小的东西;2) 增加 RAM;3) 增加页面文件大小。这是因为提交限制只是 RAM 的大小加上页面文件的当前大小。
如果您按照操作系统设计人员的意图启用页面文件,您将不会看到这些消息,并且您的程序也不会崩溃。
尽管 CausingUnderflowsEverywhere 在他们的评论中说,有时你需要一个页面文件来允许程序分配它们所需的虚拟内存,即使有足够的可用 RAM,即使页面文件实际上可能未被使用。至于原因,请参阅我的答案这里和在此处输入链接描述这里。
注意:任务管理器报告的大多数“缓存”RAM 仍为“可用”;SuperFetch 缓存实际上并未“使用”RAM。“缓存”不是导致您出现问题的原因。缺少页面文件才是。