.net VS 2010 IDE 2GB限制

.net VS 2010 IDE 2GB限制,.net,visual-studio-2010,ide,.net,Visual Studio 2010,Ide,我正在win 7 64位系统上使用VS 2010,该系统具有8 GB内存。我的应用程序是32位的。在VS 2010.Net IDE中,应用程序在Windows任务管理器中显示为“MyApp.vshost.exe*32”,而VS IDE本身显示为“devenv.exe*32” 我检查了一下,发现VS 2010 IDE文件(devenv.exe)符合/LargeAddressWare标志 但是,在调试大型模型时,IDE会失败,并出现内存不足异常。在Windows任务管理器中,“MyApp.vshos

我正在win 7 64位系统上使用VS 2010,该系统具有8 GB内存。我的应用程序是32位的。在VS 2010.Net IDE中,应用程序在Windows任务管理器中显示为“MyApp.vshost.exe*32”,而VS IDE本身显示为“devenv.exe*32”

我检查了一下,发现VS 2010 IDE文件(devenv.exe)符合/LargeAddressWare标志

但是,在调试大型模型时,IDE会失败,并出现内存不足异常。在Windows任务管理器中,“MyApp.vshost.exe*32”进程表示大约1400 MB的内存使用量(而“devenv.exe*32”进程则远远低于500 MB)。是否可以将“MyApp.vshost.exe*32”进程设置为/largeaddressware,以避免出现内存不足的情况?如果是这样,如何在IDE中实现这一点。虽然将最终的应用程序二进制文件设置为/LargeAddressAware可以工作,但我仍然需要能够在IDE中使用这些类型的大型模型调试应用程序。我还应该注意到,我的应用程序有一个很深的对象层次结构,有许多集合,这些集合一起需要大量内存。但是,我的问题与尝试创建一个需要大于2GB内存的大型阵列无关

我应该注意的是,我能够在VB6 IDE中运行相同的应用程序,并且只要VB6 IDE是make/largeAddressware,就不会出现内存不足的情况。在VB6的情况下,IDE和正在调试的应用程序是同一进程的一部分(而不是像VS 2010那样拆分为2)。VB6进程可以大于3 GB,而不会出现内存不足问题


最终,我的目标是让我的应用程序完全以64位运行,以访问更多内存。我希望在这种情况下,IDE将允许调试过程在不崩溃的情况下超过2GB(当然,在当前情况下超过1.4GB)。然而,目前,虽然我的应用程序95%是64位的,但我调用的是一个遗留的COM 32位DLL,因此,我的整个应用程序在替换该DLL之前都必须以32位模式运行。

我可以想到一些选项:

  • 禁用VSHost进程-您是否确实需要VS主机进程的支持?如果不只是取消选中“启用Visual Studio宿主进程”选项

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

  • 在VSHost进程中强制设置标志-使用强制设置.VSHost.exe中的标志(不知道这是否可行!)

  • IDE因内存不足异常而失败

    不,您的程序会因该异常而失败,而不是IDE。您必须在生成后事件中运行editbin.exe才能设置标志:

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

    这在vshost.exe版本上不起作用,您必须关闭托管进程。Project+属性,调试选项卡。

    太棒了,我按照您的建议关闭了可选的托管过程(Paolo在第一个答案中也提到了),然后手动使用Laatido app将myApp.exe设置为/LargeAddressAware。然后我就可以在IDE中运行我的一个大型模型了!稍后我将尝试使用后期构建方法来更好地自动化这些步骤。“Laatido应用程序”到底是什么?你花钱请人打开了这个功能?不,我在上一台计算机上找不到EditBin,当时下载了一个免费的小程序,它有一个简单的表单,可以让你选择一个exe文件,检查它是否已经设置了/LargeAddressWare标志,如果没有,则为你设置标志。这是使用免费快速版的责任。如果你没有钱,那么你最好有时间寻找替代品。那么在RAM上花钱?不,我用的是VS2010专业版。我对EditBin不太熟悉,所以我不喜欢laatido。如上所述,我将尝试在后期构建中使用editBin来自动化这些步骤。这就是计划。正在讨论的dll是MS DirectX 8。需要更新到MS DirectX 10或11。不幸的是,这不是一个简单的过程!事实上,在Visual Studio运行时,该文件已完全锁定。