我有几个需要实际内存的应用程序,它们消耗了大量的内存。一种解决方案是将应用程序内的每一 block 内存都锁定 (VirtualLock),但这需要很多时间才能正确执行,因为应用程序是在 .NET 中。
所以,我的问题是,禁用交换文件(我的机器上有足够的 RAM)是否是确保所有内容都真正在内存中的有效策略?
更新:
让我重复一遍——我知道这可能是一种非常肮脏的做事方式,并且可能会破坏整个操作系统的运行,但是,我会承担全部责任并应对后果,只想知道我可能会做什么遇到问题。
以下是其他 StackExchange 用户的看法:https://serverfault.com/questions/23621/any-benefit-or-detriment-from-removing-a-pagefile-on-an-8gb-ram-machine
最佳答案
有一件事你不能通过这样做强制进入内存:可执行图像和映射文件。这些是它们自己的每个“页面文件”。当发生内存压力时,Windows 会检测到它们在内存中的页面没有被修改,并且会丢弃这些页面,因为它们可以在以后重新加载。
所有没有文件支持的东西都不能被分页(只是没有地方放)。所以我猜你的技术在实践中会奏效。
您不会看到很多问题。我一直在没有页面文件的情况下运行(16GB RAM)。您失去了在蓝屏情况下捕获完整内存转储的能力,但很可能您不需要它。
只要确保您永远不会达到物理内存限制,否则很多程序会严重崩溃。没有人编写他们的程序来应对 OOM 情况(除了我从未见过的核心 Windows 组件崩溃。他们做得很好。)。
关于.net - 禁用交换(页面文件)以确保所有内容都在内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11483119/