Обычно, чтобы избавиться от этого, мне нужно перезапустить Visual Studio Сборка, которую мне нужно использовать в моем проекте, достаточно БОЛЬШАЯ ( > 70 МБ), и, вероятно, это причина этой ошибки, я никогда не видел таких вещей в предыдущих проектах. Хорошо, если это причина моего вопроса, почему это происходит и что мне нужно сделать, чтобы остановить его. У меня достаточно свободной памяти на дисках и оперативной памяти 2Gb (только при использовании исключения — 1,2 Гб) Я искал ответы на такие вопросы, как это. Предложения, обычно связанные с:
- к числу обработчиков пользователей, которые ограничены в WinXP.
- к физическому пределу памяти, доступному для каждого процесса.
Я не думаю, что мог бы объяснить мое дело
Для пользовательских обработчиков и других ресурсов GUI — я не думаю, что это может быть проблемой. Большая сборка на 70 Мбайт — это, скорее, графический интерфейс, не содержащий графический интерфейс, который работает с сокетами и реализует парсеры проприетарных протоколов. В моем текущем проекте у меня есть только 3 формы GUI, с общим количеством элементов управления графическим интерфейсом < 100.
На компьютере недостаточно памяти | Решение проблемы
Я полагаю, что мое дело ближе к тому, что в Windows XP адресное пространство процесса ограничено памятью 2 ГБ (и, принимая во внимание сегментацию памяти, возможно, что у меня нет свободного сегмента, достаточно большого, чтобы выделить память).
Однако трудно поверить, что сегментация может быть настолько большой после 2-3 часов работы с проектом в Visual Studio. Диспетчер задач показывает, что VS потребляет около 400-500 Мб (OM + VM). Во время компиляции VS необходимо загружать только метаданные.
Ну, в этой библиотеке много классов и интерфейсов, но все же я ожидал бы, что 1-2 Мб более чем достаточно, чтобы выделить метаданные, которые используются компилятором, чтобы найти все общедоступные классы и интерфейсы (хотя это только мое предложение, я не знаю, что именно происходит внутри CLR при загрузке метаданных сборки).
Кроме того, я бы сказал, что весь размер сборки настолько велик, потому что это библиотека C++ CLI , у которой есть другие управляемые библиотеки, которые статически связаны в один DLL . Я оценил (используя Reflector), что код .NET(управляемый) составляет приблизительно 5-10% от этой сборки.
Любые идеи, как определить реальную причину этой ошибки? Существуют ли какие-либо ограничения или рекомендации относительно размера сборки .NET? (Да, я знаю, что стоит подумать о рефакторинге и расщеплении большой сборки на несколько меньших частей, но это сторонний компонент, и я не могу его перестроить)
Источник: overcoder.net
Недостаточно памяти для завершения этой операции
У нас есть настольное приложение, которое воспроизводит видео. Это видео является частью проекта, и проект упакован в установщик. Время от времени при создании проекта установщика отображается следующее сообщение об ошибке:
Недостаточно памяти для завершения этой операции
Если я перезапущу Visual Studio, все заработает.
Есть ли способ этого избежать? Есть ли лучший способ упаковать видео в установщик?
Ranjith Venkatesh 8 Июл 2011 в 18:38
11 ответов
Лучший ответ
Обычно это происходит, когда процессу сборки требуется много оперативной памяти, и он не может ее получить. Поскольку перезапуск Visual Studio устраняет проблему, скорее всего, это также ваш случай.
Попробуйте закрыть некоторые из запущенных приложений. Вы также можете попробовать добавить на свой компьютер больше оперативной памяти или увеличить файл подкачки.
rmrrm 11 Июл 2011 в 11:16
По моему опыту, это неправда: моя оперативная память используется на 1/4 без явных всплесков в процессе сборки. Я видел этот стандартный ответ, данный Космином в другом месте, и проголосовал бы против него, если бы мог.
16 Авг 2012 в 20:08
22 Июл 2013 в 20:05
Я полностью согласен. Бывший разработчик нашего проекта внедрил в приложение огромный шаблон базы данных (тестирование заполнило его большим количеством данных). Я не видел, чтобы эта проблема возникала после перемещения базы данных из приложения в папку ресурса. Спасибо, парни.
23 Июл 2013 в 22:36
Я столкнулся с этим вопросом, когда пытался скомпилировать свое решение C # в Visual Studio 2010 в Windows XP. Один проект имел достаточное количество встроенных ресурсов (размер результирующей сборки составлял ~ 140 МБ), и я не мог скомпилировать решение, потому что я получал
Недостаточно памяти для завершения этой операции
Ошибка в моем выводе сборки.
Ни один из ответов на этот вопрос не помог, но я нашел ответ на «Недостаточно памяти для завершения этой операции» by ScottBurton42 на сайте social.msdn.microsoft.com. Он предлагает добавить переключатель 3GB в файл Boot.ini и сделать так, чтобы devenv.exe учитывал большой адрес. Добавление переключателя 3GB в мой файл Boot.ini помогло мне (я думаю, что devenv.exe для Visual Studio 2010 и более поздних версий уже поддерживает большие адреса).
Мой ответ основан на этом ответе.
Решение 1. Установите переключатель /3GB Boot.ini
Виртуальное адресное пространство процессов и приложений по-прежнему ограничено 2 ГБ, если в файле Boot.ini не используется переключатель /3GB .
Переключатель /3GB выделяет 3 ГБ виртуального адресного пространства для приложения, которое использует IMAGE_FILE_LARGE_ADDRESS_AWARE в заголовке процесса. Этот переключатель позволяет приложениям адресовать 1 ГБ дополнительного виртуального адресного пространства свыше 2 ГБ.
Виртуальное адресное пространство процессов и приложений по-прежнему ограничено 2 ГБ, если только переключатель /3GB не используется в Boot.ini file . В следующем примере показано, как добавить параметр / 3GB в файл Boot.ini , чтобы включить настройку памяти приложения:
[boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(2)WINNT [operating systems] multi(0)disk(0)rdisk(0)partition(2)WINNT=». » /3GB
Обратите внимание: « . » в предыдущем примере — это программное имя операционной системы.
В Windows XP файл Boot.ini можно изменить, перейдя в
- Свойства системы → Дополнительно → Запуск и восстановление → Настройки → Запуск системы → Изменить
На странице переключателя /3GB в MSDN написано:
В 32-разрядных версиях Windows параметр /3GB включает 4 GT RAM Tuning, функцию, которая увеличивает виртуальное адресное пространство пользовательского режима до 3 ГБ и ограничивает компоненты режима ядра оставшимся 1 ГБ.
Параметр /3GB поддерживается в Windows Server 2003, Windows XP и Windows 2000. В Windows Vista и более поздних версиях Windows используйте элемент IncreaseUserVA в BCDEdit .
После перезапуска машины настройки вступят в силу.
Решение 2. Сообщите devenv.exe о большом адресе:
- Откройте командную строку Visual Studio (или командную строку разработчика, в зависимости от версии Visual Studio).
- Введите и выполните следующую командную строку:
editbin /LARGEADDRESSAWARE devenv.exe`
Это позволит devenv.exe получить доступ к 3 ГБ памяти вместо 2 ГБ.
Источник: question-it.com
Как исправить утечки памяти при отладке в Visual Studio?

Вы можете получить любое сообщение об ошибке, в котором говорится, что Visual Studio устранит утечки памяти. Есть несколько способов решить эту проблему процесса, о которых мы поговорим в ближайшее время.
Одобрено
Откройте процесс в Visual Studio.В меню «Отладка» установите конфигурацию решения для «Выпустить» и выберите «Локальный отладчик Windows» (или «Локальный компьютер») в качестве конкретной цели.В строке меню выберите «Отладка»> «Профилировщик производительности».
Вы можете использовать такие инструменты как встроенный в отладчик инструмент сканирования миль памяти или методы профилирования производительности, такие как сопоставление объектов .NET и, кроме того, .Memory Posthumous Memory Инструмент использования для обнаружения утечек памяти и плохого использования памяти.
Эту утилиту легко использовать для захвата изображений целых партий от одного управляемого и собственного хранилища. Вы можете собирать фотографии в приложениях .NET, ASP.NET, C ++ или просто в общих (.NET и собственный режим) приложениях для работы.
Инструмент «Использование памяти» может работать в отдельном открытом проекте Visual Studio, в отличном установленном мобильном приложении Microsoft Store или в работающем или находящемся на ходу приложении. Вы можете использовать инструмент барахолки с отладкой или без нее. Для получения дополнительной информации см. Запуск специальных инструментов профилирования с отладчиком или без него . Для отладки Вы можете упростить или отключить профилирование ОЗУ и собрать данные о потреблении памяти по частям. Вы можете увидеть, как приложение памяти окупается, когда выполнение приостанавливается с достижением точки останова.
Программисты .Net могут выбирать между .NET Object Allocation Tool или Memory Usage Tool .
- Инструмент распределения объектов .NET помогает большинству людей обнаруживать закономерности распространения и аномалии при выполнении кода .NET и выявлять часто встречающиеся проблемы. Этот инструмент работает только потому, что это специальный инструмент для вскрытия. Может ли человек запустить это устройство на локальных, возможно, удаленных компьютерах?
- Инструмент использования памяти полезен для различения утечек памяти, которые обычно не встречаются в компьютерных приложениях .NET. Когда нам нужны функции отладчика для проверки времени памяти, например.
- Анализировать использование памяти всем отладчиком
- Анализировать память без использования отладчика

У вас есть возможность настраивать инструменты профилирования без отдельного отладчика в Windows 7 и в ближайшее время. Рекомендуются действия Windows и более поздние версии, которые могут запускать инструменты профилирования с использованием этого отладчика (окно «Средства диагностики»).
Блоги и, следовательно, видео
См. также
- Профилирование в Visual Studio
- Внимательно изучите инструменты профилирования
- Статья
- 2 минуты на чтение.
Visual Studio 2019 предоставляет вам достойный просмотрщик памяти и может быть легко доступен в интерактивном режиме во время отладки, а также во время разработки (без отладки). Я показываю минимальный пример для всех случаев, когда это происходит.
Основная идея состоит в том, чтобы сделать хороший снимок, связанный с кучей, часто на стадии разработки. и завершение процесса, кроме того, затем сравнивайте эти состояния памяти на пути, чтобы определить любые потенциальные утечки памяти.
Интерактивный
Создайте следующий main.File cpp (в одном конкретном новом консольном приложении):
#include int main () int равно 1; char * s = новый дизайн [17]; strcpy_s (s, 17, «stackoverflow_pb»); символ 6. ss = новый на открытом воздухе [14]; strcpy_s (ss, 14, «Stackoverflow»); снять [] сс; Возвращает 0;
- Определите точку останова в первой области «int a …»
- Щелкните “Отладка”> “Windows”> “Показать средства диагностики”; и выберите, чтобы действительно использовать обратный вызов
- Затем выполните отладку кода ( F5 ), щелкнув тип точки останова удалить моментальный снимок инструмента alexa, чтобы завершить использование памяти.
- Перейти к последней строке «return 1 ..» ( jump ( F10 ) несколько раз) и даже сохранить еще один снимок.
- Щелкните ярко-белую красную стрелку во втором токене (на вкладке “Использование памяти”).
- Откроется еще одна новая вкладка “Снимок”, которая позволит представителям вашей семьи сравнить этот снимок с первым (или любым другим) и указать утечки памяти. В качестве конкретного экземпляра используется память для различных s (stackoverflow_pb). Вы часто найдете его, по существу дублируя любой объект “char []”.

Действия, описанные в вышеупомянутом курсе, проиллюстрированы следующей фотографией:
#include #include «windows.h»#define _CRTDBG_MAP_ALLOC // для программного обеспечения больше фактов #include // всегда бесплатно для Mallocint main () _CrtMemState продано; _CrtMemState sNeu; _CrtMemState sDiff; _CrtMemCheckpoint ( // делаем крупный снимок char (пробел) erinarians = новый персонаж [17]; strcpy_s (s, 17, «stackoverflow_pb»); char * ss означает новый символ [14]; strcpy_s (ss, 14, «Stackoverflow»); Удалить [] ss; _CrtMemCheckpoint ( // Посмотрите if (_CrtMemDifference ( sOld, ———-_ CrtMemDumpStatistics ———«); _CrtMemDumpStatistics ( OutputDebugString (L «———-_ CrtMemDumpAllObjectsSince ———«); _CrtMemDumpAllObjectsSince ( OutputDebugString (L «———-_ CrtDumpMemoryLeaks ———«); _CrtDumpMemoryLeaks (); Возвращает 0;
Устранение утечки памяти при использовании Java Flight Recorder.
Обнаружение утечки памяти. Найдите утечку класса.Видите ли, я бы сказал исключение OutOfMemoryError.Вместо этого диагностируйте OutOfMemoryError.Диагностируйте утечки в коде терминов Java. Получите гистограмму кучи человека.Диагностируйте утечки в собственном префиксе. Следите за всей долей памяти и бесплатными звонками.
Он делает то же самое, но с сигналом для помещения его в систему автоматического добавления узлы _CrtMemCheckpoint делают снимки и _CrtMemDifference оценивает изображения состояния памяти, а также возвращает истину, если они во многих случаях отличаются.
Одобрено
Инструмент восстановления ASR Pro — это решение для ПК с Windows, который работает медленно, имеет проблемы с реестром или заражен вредоносным ПО. Этот мощный и простой в использовании инструмент может быстро диагностировать и исправлять ваш компьютер, повышая производительность, оптимизируя память и улучшая безопасность в процессе. Больше не страдайте от вялости компьютера — попробуйте ASR Pro сегодня!

В любом случае done условно входит в блок и записывает подробные сведения об утечках, выполняя количественные функции (см. _CrtMemDumpStatistics, _CrtMemDumpAllObjectsSince и так _CrtDumpMemoryLeaks – последний обязательно должен иметь снимки).
Шаг 1: Добавьте счетчики в инструмент Perfmon. Запустите каждый из наших общих мониторов производительности, как показано ниже.Шаг 2. Запустите варианты использования, чтобы отследить какую-то диаграмму.Шаг 3. Следуйте инструкциям, используя код, и устраните выбранную проблему.
Чтобы увидеть результаты. Хорошо, запустите последнюю доверенную точку останова “return 0”, нажмите F5 и перейдите к консоли отладки. Вот результат:
- Интерактивная аналитика: измерение использования памяти в Visual Studio
- О разработке: проверьте наличие утечек памяти с помощью библиотеки CRT и файлов кучи отладки CRT (также для кучи)
Повреждение данных
Источник: itnewstoday.net