关于您的最后一个问题-简短版本:错误消息是关于“已提交”虚拟地址空间的。如果您在第二个屏幕快照中查看“提交费用”图,您会发现它确实达到或非常接近限制。
“可用”,“可用”或“正在使用”的RAM数量无关紧要。特别是,“可用” RAM的短缺绝对不是“内存不足”或“内存不足”消息的原因。
提交限制等于总RAM +页面文件大小。分配已提交的内存后,即使尚未实际使用它,也会立即将其计为“提交费用”……这意味着不会立即使用RAM或PF空间。仅在实际引用内存时才使用物理空间(无论是在RAM中还是在页面文件中)。从那时起,它必须存在某个地方,直到程序将其释放,否则整个过程结束。
示例:假设您没有页面文件,因此提交限制为16 GB(您的RAM大小)。现在,假设每个尝试8个进程以VirtualAlloc(MEM_COMMIT)1 GB。结果:提交费用增加了8 GB。但是,RAM不会立即受到影响!好像您在文具店里买了一纸纸,但实际上没有任何纸。但是,每当您需要一张新纸时,就会神奇地出现一张。直到用完整个打击垫(分配区域的大小)。
现在假设这些进程中的每一个实际上仅访问其1 GB中的100 MB。使用的RAM只有800 MB。
但是由于它们每个人都可能引用其全部1 GB,因此操作系统必须确保8 GB的RAM +页面文件空间...好吧,如果没有页面文件,则仅保留RAM ...以防万一。 。回到文具店,他们需要保留足够的纸张库存,以便为每个人提供以前购买的纸张。
因此,当当前提交的数量达到限制时,操作系统必须停止允许VirtualAlloc(MEM_COMMIT)成功。
为什么?因为期望该过程检查VirtualAlloc的结果以查看是否成功。一旦这样做并发现分配成功,该进程就有权期望其对整个提交区域的后续引用将成功。
如果Windows允许提交费用超过可用于实现该空间的可用空间量,则无法始终满足该期望。
一种快速的解决方法是增加页面文件的默认大小(初始值)。从上面的解释中,您应该能够理解为什么即使没有任何内容写入该文件,也可以避免出现错误消息。再次,OS确保在需要时可用于所有提交费用的空间。当进程分配已分配的内存时,它们只是在说:“嘿,操作系统,我可能需要这么多。” 这并不意味着他们会实际使用它,当然也不意味着他们实际上已经在使用它。
有关更多信息,请参见此处。
现在... 为什么您的进程似乎没有加起来时要使用那么多的提交,这是另一个问题。要开始查看,请显示任务管理器的“性能”选项卡的“内存”部分。