我不断收到这种烦人的低内存警告/提示,要求我关闭正在玩的游戏。这种情况经常发生,而我仍有大约 6 GB 的可用内存。我禁用了虚拟内存,因为当我有 10 GB 可用内存时,它会将东西放在页面文件上,这导致我的磁盘使用率飙升。
有什么方法可以禁用此警告?我有 16GB 内存,所以这应该不是问题。我更愿意关闭页面文件,因为我的硬盘非常吵,所以最好尽可能让它保持低速运转。
我不想完全禁用它。理想情况下,我希望它在剩余约 2GB 而不是 6GB 时关闭,但如果这不可行,我可能会完全禁用它。
答案1
总结一下斯科特的回答,你收到内存不足警告是因为,实际上,你的系统是由于虚拟内存不足以吸收大量内存请求,因此实际可用内存不足。程序有时可能会分配大量内存,但实际上不会一次性全部使用。
可能无法禁用此警告,因为它是 Windows 内置的。不过,我不排除存在某种注册表黑客攻击的可能性。
编辑:这答案可能会有帮助。
答案2
不要禁用页面文件。将其设置为最小 1024 和最大 2048MB,这样您就不会再收到此消息了。
答案3
即使程序不打算对内存执行任何操作,Windows 也允许程序请求分配内存(虚拟地址空间)。这样程序就可以在稍后使用内存,而不必在时间紧迫的代码部分花费额外的时间来检查内存是否可用。
Windows 不会过度使用内存,因此假设您有 10MB 的 RAM,一个程序请求 5MB(但只使用了 2MB),而第二个程序请求 6MB。Windows 将拒绝第二个程序的请求,因为如果两个程序都想使用其全部分配内存,它无法保证它们可以使用这些内存。
如果它确实允许在没有足够空间的情况下进行分配请求,那么您要么需要让试图写入没有空间的内存的程序崩溃,要么强制终止另一个程序以腾出空间。(Linux 确实允许内存过度使用,如果您想通过它允许它/proc/sys/vm/overcommit_memory
并遵循“强行终止另一个程序“当遇到无法完成的内存写入时的方法)
当您有一个页面文件并且某个程序请求 5MB(但只使用了其中的 2MB)时,它会将实际使用的 2MB 内存放入 RAM,而其他 3MB 则分配给页面文件。因为这只是“分配”,并没有从中写入或读取任何内容,因此没有执行任何 IO,驱动器的速度也无关紧要。现在,当第二个程序出现并请求 6MB 时,仍然有足够的空间可供其满足请求。
现在来看看你的情况。首先,当你检查使用了多少内存时,你是检查“工作集”还是“提交大小”。我们在上一个示例中看到的“工作集”应该是“仅使用 2MB”,而“提交大小”应该是你上面请求的“5MB”。
当您没有页面文件时,“提交大小”的总和必须小于系统中的总 RAM,对于具有页面文件的系统,“提交大小”的总和可以等于系统中的总 RAM + 页面文件大小。
我不知道当您检查可用内存时任务管理器是否显示“工作集”的总数,或者当您没有页面文件时它是否会切换到“提交大小”的总数,您可能比您想象的更接近您的极限。
32 位程序最多可以分配 2GB 的虚拟地址空间,而 64 位程序最多可以为自己分配 7 TB。因此,您打开的任何程序都可能很快占用非常大的地址空间,由于 Windows 经过多年的设计和调整,可以与页面文件配合使用,我认为在达到总容量的 66% 时向用户发出警告是非常合理的。
我知道很多人认为没有页面文件,性能会更好,这在 Windows 98 时代确实如此,但现在很多事情都发生了变化,内存管理也好多了。您在问题中说,由于磁盘使用率高,您禁用了页面文件,您是如何测量磁盘使用率的,您怎么知道它正在进入页面文件?如果您在仍有大量可用内存的情况下获得大量 IO,则可能表明存在其他问题,我们可能能够帮助您解决。