我在 32 位系统上运行 Visual Studio 2010,经常遇到虚拟内存不足的问题,因此我无法再在 VS 中执行复制/粘贴之类的操作。
我查看了几个选项,微软线这表明运行时打开的扩展较少,如果这不起作用,请使用 bcedit /set IncreaseUserVA 3072 命令。
这似乎确实缓解了这个问题,但是使用大约一天后,Windows 突然开始告诉我磁盘空间不足 - 在一个可用空间超过 100GB 的驱动器上。例如,它会停止复制文件,说没有空间复制它。但是单击“重试”会成功。许多其他正在将内容写入磁盘的程序会定期失败。(包括 Skype...你为什么一直在写入磁盘,Skype?!)
我运行了 chkdsk 并做了其他基本检查,然后得出结论:一定是我的配置更改导致了这个问题。幸运的是,恢复默认设置成功了,我现在又可以正常工作了。
IncreaseUserVA 上的大多数文章(微软的文章除外)都说“使用风险自负”,显然我这样做了,但失败了。但有人能解释为什么会出现这种情况/对 Windows 7 配置进行看似合法的更改会有什么问题吗?
记录显示 - 该机器是戴尔 Vostro 笔记本电脑,配备 260Gb/5400rpm 磁盘驱动器、3.2Gb(有效)RAM,运行 Windows 7 并包含 SP1 之前的所有更新。
答案1
Windows 将 32 位系统上可用的 4GB 地址空间分成两半,这样内核获得 2GB,程序获得 2GB(由于是虚拟化的,因此每个程序获得 2GB)。“bcedit /set IncreaseUserVA 3072”命令会更改分区,这样每个程序获得 3GB,内核空间仅获得 1GB。大多数情况下,这都可以正常工作,但正如您所注意到的,您可能会遇到麻烦。通常是一些在内核空间中运行的驱动程序被硬编码为假设它有 2GB 的可用地址空间,当它尝试使用 2GB 的地址空间而没有检查是否可以时,会导致问题。
答案2
如果您有 8 GB 的 RAM 并且需要更大的用户地址空间,最好的解决方案是安装 Windows 2003 服务器。无需进行任何调整,您的 32 位应用程序每个都获得 4 GB 的地址空间。有些驱动程序不喜欢这样,这就是 MS 不在桌面操作系统上启用此功能的原因。由不支持此功能的驱动程序引起的崩溃是不可预测的,很难诊断,并且大多发生在未在服务器环境中使用的驱动程序中。
可以修改 Vista/Win7 内核并将其作为选项添加到启动菜单中,以获取与 32 位服务器版本相同的内存:
www.geoffchappell.com/notes/windows/license/memory.htm
有一个预先制作的补丁可以完成这些操作,但我还没有测试过它,而且也没有它的源代码......
答案3
我有时会将 IncreaseUserVa 设置为 3g,以便编译大型项目。我注意到,如果系统进入休眠状态,唤醒后会变得非常不稳定。我想服务器通常不会休眠。