VS 2010 IDE 2GB限制

时间:2011-01-03 21:07:03

标签: .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)似乎符合/ LargeAddressAware标志。

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

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

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

2 个答案:

答案 0 :(得分:3)

  

IDE因内存不足异常而失败

不,您的程序因该异常而失败,而不是IDE。您必须在post build事件中运行editbin.exe以设置标志:

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

在vshost.exe版本上工作,您必须关闭托管过程。 Project + Properties,Debug选项卡。

答案 1 :(得分:2)

我能想到的一些选择:

  1. 禁用VSHost进程 - 您是否真的需要VS主机进程中的extra debugging features?如果不只是解开“启用Visual Studio托管过程”选项。

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

  3. 强制VSHost进程中的标志 - 使用post-build command强制设置.vshost.exe中的标志(不知道是否可行!)