.net - 禁用交换(页面文件)以确保所有内容都在内存中

标签 .net windows memory pagefile

我有几个需要实际内存的应用程序,它们消耗了大量的内存。一种解决方案是将应用程序内的每一 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/

相关文章:

c - 这两个地址怎么会不同呢?

iphone - 当 OpenGL ES (iPhone) 上下文被释放时,纹理缓冲区是否会刷新?

c# - 写入没有文件路径的流

javascript - 在文本框中输入任何内容之前会出现验证错误消息

python - 如何让 IDLE 接受 Unicode 字符的粘贴?

c - 二进制搜索树 malloc 没有为后续节点提供足够的内存

c# - WPF 中的拖放

c# - 文件归档库/API?

windows - 关于将 dll 部分复制到内存

c++ - 当用户取消时隐藏 CDialogImpl 对话框