Недостаточно памяти для завершения этой операции - PullRequest
19 голосов
/ 08 июля 2011

Среда:

  • Visual Studio Ultimate 2010
  • Windows XP
  • Настольное приложение WPF с использованием .NET 4.0

У нас естьнастольное приложение, которое воспроизводит видео.Это видео является частью проекта, и проект упакован в установщик.Время от времени при сборке проект установщика выдает следующее сообщение об ошибке:

Недостаточно памяти для выполнения этой операции

Если я перезапускаю Visual Studio, это работает.

Есть ли способ избежать этого?Есть ли лучший способ упаковать видео в установщик?

Ответы [ 11 ]

14 голосов
/ 11 июля 2011

Обычно это происходит, когда процесс сборки требует много оперативной памяти и не может ее получить. Поскольку перезапуск Visual Studio устраняет проблему, скорее всего, это также ваш случай.

Попробуйте закрыть некоторые из запущенных приложений. Вы также можете попробовать добавить больше оперативной памяти на свой компьютер или увеличить файл подкачки.

7 голосов
/ 03 мая 2013

Задача

В моем случае проблема была в тестовом проекте, содержащем очень большой (1,5 ГБ) тестовый файл в качестве встроенного ресурса . У меня 16 ГБ ОЗУ на моей машине, и 8 ГБ свободно, когда это произошло, поэтому проблема с ОЗУ не возникала.

Возможно, что мы достигли ограничения 2 ГБ, которое CLR имеет для любого отдельного объекта . Не углубляясь в то, что MSBuild делает изнутри, я могу только предположить, что во время компиляции встроенный ресурс загружается в граф объектов, который достигает этого предела.

Сообщение об ошибке очень бесполезно. Моя первая мысль, когда я увидел это, была: «Не хватило ли у меня места на диске?»

Решение

Это тестовый проект проверки файлов. Одно из требований заключается в том, чтобы иметь возможность обрабатывать файлы такого размера, поэтому моя команда посчитала целесообразным встраивать их для использования в тестовых примерах.

Мы исправили ошибку, переместив файл в сеть (так же, как он будет доступен для валидатора в производстве) и пометив тест как интеграционный тест вместо модульного теста. В конце концов, разве модульные тесты не должны быть быстрыми?

5 голосов
/ 11 марта 2016

Я сталкивался с этим вопросом при попытке скомпилировать свое решение C # в Visual Studio 2010 в Windows XP.В одном проекте было достаточно встроенных ресурсов (размер получившейся сборки составлял ~ 140 МБ), и я не смог скомпилировать решение, потому что получал

Недостаточно памяти для завершенияэта операция

ошибка в выводе моей сборки.

Ни один из ответов на этот вопрос не помог, но я нашел ответ на " Недостаточно памяти для завершенияэта операция" ScottBurton42 на сайте social.msdn.microsoft.com.Он предлагает добавить ключ 3GB в файл Boot.ini и сделать осведомленность о большом адресе devenv.exe.Добавление переключателя 3GB в мой файл Boot.ini помогло мне (я думаю, что devenv.exe для Visual Studio 2010 и выше уже поддерживает большие адреса).

Myответ основан на этом ответе.


Решение 1: Установите переключатель /3GB Boot.ini

Страница Поддержка памяти и операционная система WindowsСистемы в MSDN говорят:

Виртуальное адресное пространство процессов и приложений по-прежнему ограничено 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

Примечание. В предыдущем примере "????" будет программным именем рабочейsystem.

В 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 большой адрес с учетом:

  1. Откройте командную строку Visual Studio (или командную строку разработчика, в зависимости отверсия Visual Studio)

  2. Введите и выполните следующую командную строку:

    editbin /LARGEADDRESSAWARE {path}\devenv.exe`
    

    где {path} - это путь к devenv.exe (вы можете найтидля этого перейдите в свойства ярлыка Visual Studio).

Это позволит devenv.exe получить доступ к 3 ГБ памяти вместо 2 ГБ.

3 голосов
/ 23 сентября 2012

Очистка И восстановление решения сработало для меня

1 голос
/ 20 февраля 2017

В моем случае сервер, на котором выполнялся код, не смог обработать мой распараллеленный код.

Обычно я запускаю настройку, подобную следующей

new ParallelOptions { MaxDegreeOfParallelism = Math.Max(1, Environment.ProcessorCount / 2) }

Ввод переменной и разрешение блокировки ядер, используемых для 1 (в результате код, подобный следующему), решил эту проблему для меня.

new ParallelOptions { MaxDegreeOfParallelism = 1 }
1 голос
/ 12 ноября 2015

Я могу опоздать с ответом, но для дальнейшего использования, возможно, вы захотите проверить настройки файла дампа Windows (и, возможно, не указывать его).

1 голос
/ 25 июня 2015

В моем случае у меня осталось очень мало памяти на диске C.Я очистил несколько элементов с диска C и попытался снова.Это сработало.

0 голосов
/ 27 сентября 2018

Для Visual Studio вы можете попробовать сделать следующее:

  1. Закрыть все экземпляры Visual Studio.
  2. Откройте инструмент разработчика Visual Studio в Режим администратора .
  3. Перейдите к:
    C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE.
  4. Введите следующее:
    editbin /LARGEADDRESSAWARE devenv.exe.
  5. Стоит также перезагрузить компьютер.

Надеюсь, это поможет)

0 голосов
/ 01 ноября 2017

Я опоздал с ответом, но может быть полезным для других. В моем случае просто перезапуск Visual Studio решает проблему

0 голосов
/ 28 ноября 2015

Я могу исправить эту проблему, удалив или отключив (исключив) файлы * .rpt большого размера, и я оптимизировал свои отчеты!

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