【问题标题】:How to Get Visual Studio To Stay Within 4GB Virtual Address Space如何让 Visual Studio 保持在 4GB 虚拟地址空间内
【发布时间】:2015-07-01 19:51:22
【问题描述】:

Visual Studio devenv.exe 进程是 32 位 (even when run on a 64-bit OS),因此它不能使用超过 4GB 的虚拟内存。

不幸的是,当我使用 Visual Studio 调试我的 C++ 应用程序时,由于这个 4GB 的限制,我经常耗尽内存。例如,使用VMMap,下面显示了我在几个小时内导致崩溃的典型 Visual Studio 使用进度。

我怎样才能让 Visual Studio 使用更少的内存,这样我就不会因为它崩溃而浪费时间了?

Visual Studio 通常使用超过 3.5 GB 的虚拟地址空间吗?

我使用的是 Visual Studio 2012,但我认为这个问题跨越不同的 VS 版本,因为 Visual Studio 2015 仍然没有 64 位版本。

(请注意,VMMap 将“空闲”报告为地址空间中的剩余内存,32 位进程最多 4GB,Windows 上 64 位进程最多 8TB。)


我已经尝试过的事情:

  • 以安全模式启动
  • 删除所有插件和扩展,以便在“工具”>“加载项管理器”和“工具”>“扩展”中不显示任何内容(https://github.com/tsasioglu/Total-Uninstaller 对此很有帮助)
  • 删除我的 .suo/.sdf 文件
  • 删除我的 AppData/*/Microsoft/VisualStudio 文件夹
  • 使用漏斗并过滤掉除 3 个项目之外的所有项目
  • 删除了我所有的“符号文件 (.pdb) 位置”选择并选择了“自动加载符号:”“仅指定的模块”
  • 选择“仅启用我的代码”进行调试
  • 禁用 Intellisense(工具 -> 选项 -> 文本编辑器 -> C/C++ -> 高级 -> 禁用 IntelliSense)

【问题讨论】:

  • 您正在运行哪些附加组件、扩展或插件。在卸载所有插件之前,我曾经遇到过同样的问题。现在它很少引起麻烦了。
  • 你真的需要加载所有167个项目吗?如果没有,请尝试“漏斗”扩展:visualstudiogallery.msdn.microsoft.com/…
  • VS 当然可以使用很多虚拟机,尤其是在您的大量项目中。尝试删除所有扩展。另外,请确保您的机器有 8GB 的​​ RAM,因此 VS 不会与操作系统争夺 RAM。 SSD 可能有助于重启。您的屏幕截图显示您使用的是 Win7,还好不是 XP。您应该改用 perfmon 和 windows 的性能计数器。
  • @ChrisO 我已经删除了所有扩展,我有 32 GB 的 RAM 和 SSD。 perfmon 和性能计数器会提供哪些 VMMap 没有提供的相关信息?
  • @JDiMatteo,抱歉刚刚注意到您的问题。 VMMap 中显示的 Committed 数量是 32 位进程最重要的计数器。所以我的错误,VMMap 已经显示了相关信息(出于某种原因正在考虑任务管理器)。正如您已经确定的那样,当您接近 3.8GB 总承诺时,应用程序就会变得不稳定。另一种选择是将 VS 的空实例附加到正在运行的应用程序以进行调试。这样就不会加载“大型”解决方案,您仍然可以获得完整的调试体验。

标签: c++ visual-studio virtual-memory


【解决方案1】:

可以可靠地让 Visual Studio 保持在其 4GB 的虚拟内存中,但在使用 VMMap 测量 devenv.exe 内存使用情况时,您可能必须尝试以下一种或多种策略:

  1. 从“工具”>“加载项管理器”和“工具”>“扩展”中删除插件和扩展(https://github.com/tsasioglu/Total-Uninstaller 可能会有所帮助)和/或在Safe Mode 中运行
  2. 定期(例如每月)删除您的 .sdf 和 .suo 文件(在 Visual Studio 关闭时)以便重新创建它们(而不是删除,考虑重命名以防您决定要恢复它们,因为您可能会丢失一些配置设置)
  3. 如果你正在加载很多符号(你可以在VS输出窗口中统计“加载的符号”),你可以disable this用工具>选项>调试>符号:“仅指定的模块”,然后点击“指定模块”并取消选中“始终加载位于模块旁边的符号”。您可以在使用 Debug > Windows > Modules 进行调试时加载其他符号。
  4. 使用FunnelSolution Folders 从大型解决方案中卸载项目
  5. 如果所有其他方法都失败,请运行两个不同的 Visual Studio 实例:第一个加载了大型解决方案但不用于调试(例如,调试 > 启动而不调试),第二个没有加载解决方案但附加到正在运行的调试过程。 (感谢 ChrisO 的建议。)
  6. 如果您确实无法让 Visual Studio 工作,请尝试使用 Microsoft 开发人员使用的 WinDbg,它是 64 位的(与 Visual Studio 不同)。

我观察到禁用大多数符号加载将 devenv 内存使用量减少 1.7 GB,并删除我的 .suo 和 .sdf 文件,将内存使用量额外减少 600 MB。内存使用量的减少使 Visual Studio 从每天崩溃多次变为在同一实例运行数天甚至数周时稳定运行。

除了减少内存使用之外,这些策略还可能显着加快 Visual Studio

【讨论】:

  • 我提交了一个 Microsoft 技术支持事件,案例编号为 115101513270502。Microsoft 帮助我想出了这些策略。
猜你喜欢
  • 2023-03-17
  • 1970-01-01
  • 2019-07-03
  • 2021-03-18
  • 2014-12-11
  • 1970-01-01
  • 2014-01-16
  • 2011-12-27
  • 1970-01-01
相关资源
最近更新 更多