VS 2010 IDE 2 ГБ ограничение - PullRequest
3 голосов
/ 04 января 2011

Я использую VS 2010 на 64-битной системе win 7 с 8 ГБ памяти.Мое приложение 32-битное.В то время как в IDE VS 2010 .Net приложение отображается в диспетчере задач Windows как «MyApp.vshost.exe * 32», а сама ID ID VS отображается как «devenv.exe * 32».

Я проверил, и кажется, что файл IDE VS 2010 (devenv.exe) соответствует флагу / LargeAddressAware.

Однако при отладке больших моделей в среде IDE возникает ошибка «Недостаточно памяти».В диспетчере задач Windows процесс «MyApp.vshost.exe * 32» указывает на использование около 1400 МБ памяти (в то время как процесс «devenv.exe * 32» значительно меньше 500 МБ).Можно ли установить процесс "MyApp.vshost.exe * 32" в / LargeAddressAware, чтобы избежать ситуации нехватки памяти?Если это так, как это можно сделать в IDE.Хотя установка окончательного двоичного файла приложения на значение / LargeAddressAware будет работать, мне все еще нужно будет иметь возможность отлаживать приложение в среде IDE с такими типами больших моделей.Я также должен отметить, что мое приложение имеет глубокую иерархию объектов со многими коллекциями, которые вместе занимают много памяти.Однако моя проблема не связана с попыткой создать, скажем, 1 большой массив, для которого требуется более 2 ГБ памяти и т. Д.

Следует отметить, что я могу запустить одно и то же приложение в VB6 IDE и не получитьситуация нехватки памяти, пока создается среда VB6 / LargeAddressAware.В случае VB6 IDE и отлаживаемое приложение являются частью одного и того же процесса (а не делятся на 2, как в случае с VS 2010.) Процесс VB6 может быть больше, чем 3 ГБ, без проблем с памятью.

В конечном счете, моя цель - полностью запустить мое приложение в 64-битном режиме, чтобы получить доступ к большему объему памяти.Я надеюсь, что в таких случаях IDE позволит процессу отладки превысить 2 ГБ без сбоев (и, конечно, более 1,4 ГБ, как в текущем случае).Однако на данный момент, хотя 95% моего приложения является 64-разрядным, я вызываю устаревшую 32-разрядную библиотеку COM и, следовательно, все приложение вынуждено работать в 32-разрядном режиме, пока я не заменю эту библиотеку.

Ответы [ 2 ]

3 голосов
/ 04 января 2011

Сбой IDE с исключением "Недостаточно памяти"

Нет, ваша программа завершается с этим исключением, а не IDE. Вам нужно запустить editbin.exe в событии после сборки, чтобы установить флаг:

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

Это будет не работать в версии vshost.exe, вам придется отключить процесс хостинга. Проект + Свойства, вкладка «Отладка».

2 голосов
/ 04 января 2011

Некоторые варианты, которые я могу придумать:

  1. Отключить процесс VSHost. Вам действительно нужны дополнительные функции отладки от процесса размещения VS? Если не просто снять флажок «Включить процесс размещения Visual Studio».

  2. Выведите из строя проблемную DLL - оберните COM DLL в простой 32-разрядный процесс и скомпилируйте остальные как 64-разрядные, используя соответствующий набор IPC для соединения этих двух.

  3. Принудительная установка флага в процессе VSHost. Используйте команду после сборки , чтобы принудительно установить флаг в файле .vshost.exe (не знаю, будет ли это работать, хотя!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...