自从我增加了计算机的内存后,非分页池就变得非常大(从 2GB 内存时的 96MB 增加到 16GB 内存时的 715MB)。
这是无法理解的,因为任务管理器报告的非分页池因进程而少于 1MB。而 Poolmon 报告的最大非分页池内存使用量为 35MB。
这些截图是在启动后立即截取的,因此这不是驱动程序中的内存泄漏。制作映像并在虚拟机中启动它,启动后仅使用了 350MB 内存!
微软在注册表中给出了一个值来限制非分页池的大小:https://technet.microsoft.com/en-us/library/cc976155.aspx但这样做并重新启动并不能解决问题。我尝试以字节(文档中是这么说的)、KB 和 MB 为单位给出值。没有成功。
在 Linux 上,我可以渲染最多占用 15.2GB 的 3D 场景。在 Windows 上,由于某些保护措施和这个巨大的池,我只能使用 12GB,然后它开始交换到磁盘,这使得一次渲染需要 20 多分钟,而不是在 Linux 上 1 分 24 秒。
那么我该如何限制非分页池的大小呢?
答案1
运行需要大量内存的程序(例如 3D 或照片应用程序)并让其占用足够的内存来开始使用页面文件将使非分页内存被释放。
我不知道为什么,但是在页面文件开始使用的那一刻,非分页池从 750MB 下降到 200MB,之后保持在这个水平(在运行大量程序并使用大量内存的几个小时的密集工作中进行了测试)。
在我看来,它使 Windows7 只占用 16GB 内存中的 350MB(相比启动时 1GB 内存)。当然,使用的内存要多得多,但通过缓存可以很好地利用这些内存,缓存使程序启动更快,数据从 RAM 而不是磁盘读取。如此巨大的默认非分页池只是浪费了内存,使系统比应有的时间更早开始交换。
这个巨大的启动非分页池的错误不会发生在 Windows 7 之前的版本中。