VS 2010 IDE 2GB limit

3
我在win 7 64位系统上使用VS 2010,内存为8GB。我的应用程序是32位的。在VS 2010 .Net IDE中,应用程序显示为Windows任务管理器中的"MyApp.vshost.exe *32",而VS IDE本身显示为"devenv.exe *32"。
我检查了一下,发现VS 2010 IDE文件(devenv.exe)编译时使用了/LargeAddressAware标志。
然而,在调试大型模型时,IDE会出现内存不足异常。在Windows任务管理器中,"MyApp.vshost.exe *32"进程显示大约使用了1400MB的内存(而"devenv.exe *32"进程则远低于500MB)。是否可能将"MyApp.vshost.exe *32"进程设置为/LargeAddressAware以避免这种内存不足情况?如果可以,如何在IDE中完成此操作?虽然将最终应用程序二进制文件设置为/LargeAddressAware会起作用,但我仍然需要能够在IDE中调试具有这些大型模型的应用程序。我还应该注意到,我的应用程序具有深层对象层次结构和许多集合,这些集合共同需要大量内存。但是,我的问题与尝试创建需要大于2GB内存的1个大数组等无关。
我应该指出,只要VB6 IDE被设置为/LargeAddressAware,我就能在其中运行相同的应用程序并且不会遇到内存不足的情况。在VB6的情况下,IDE和正在调试的应用程序是同一个进程(而不是像VS 2010一样分成2个进程)。VB6进程可以大于3GB而不会遇到内存不足问题。
最终,我的目标是使我的应用程序完全在64位下运行以访问更多内存。我希望在这种情况下,IDE将允许调试进程超过2GB而不会崩溃(当然比当前情况下的1.4GB更多)。但是,现在,虽然我的应用程序95%是64位的,但我调用了一个旧的COM 32位DLL,因此整个应用程序被迫仍然在32位模式下运行,直到我替换该DLL。

那就是计划。所涉及的dll是MS DirectX 8。需要升级到MS DirectX 10或11。不幸的是,这不是一个简单的过程! - user561732
2个回答

3

IDE出现了内存不足的异常。

并不是IDE出现了这个异常,而是你的程序出现了这个异常。你需要在后期构建事件中运行editbin.exe来设置标志:

set path=%path%;$(devenvdir);$(devenvdir)\..\..\vc\bin
editbin /largeaddressaware $(targetpath)

这将不会在vshost.exe版本上起作用,您需要关闭托管进程。项目+属性,调试选项卡。


太棒了,我按照你(以及第一个回答中的Paolo)建议的关闭了可选托管进程,然后手动使用Laatido应用程序将myApp.exe设置为/LargeAddressAware。接着,我成功在IDE中运行了我的一个大模型!稍后我会尝试使用Post build方法来更好地自动化这些步骤。 - user561732
不,我在上一台电脑上找不到EditBin,那时候我下载了一个免费的小程序,它有一个简单的表单,让你选择一个exe文件,检查它是否已经设置了/LargeAddressAware标志,如果没有,就为你设置该标志。 - user561732
这是使用免费的Express版本的责任。如果你没有钱,那么最好有时间寻找替代方案。那么你要把钱花在RAM上吗? - Hans Passant
不,我正在使用VS 2010 Pro版。我不熟悉EditBin,并已下载了Laatido。如上所述,我将尝试在postBuild中使用editBin来自动化这些步骤。 - user561732
那么我的后构建事件片段应该可以正常工作。不确定为什么你没有尝试过它。如果它对你不起作用,你必须提供诊断信息,我无法在没有网络摄像头的情况下猜测错误消息。 - Hans Passant
显示剩余3条评论

2

以下是我能想到的一些选项:

  1. 禁用VSHost进程 - 您实际上需要来自VS托管进程的额外调试功能吗?如果不需要,请取消选中“启用Visual Studio托管进程”选项。

  2. 将有问题的DLL外部化 - 将COM DLL封装在一个简单的32位进程中,并使用适当的IPC连接两者,编译其余部分为64位。

  3. 强制在VSHost进程中设置标志 - 使用后生成命令在 .vshost.exe 中强制设置标志(不知道这是否有效!)


事实上,在 Visual Studio 运行时,该文件是完全锁定的。 - JoshuadV

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接