Подтвердить что ты не робот

Для завершения этой операции недостаточно хранилища

Окружающая среда:

  • Visual Studio Ultimate 2010
  • Windows XP
  • WPF Desktop Application с использованием .NET 4.0

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

Для завершения этой операции недоступно хранилище

Если я перезапущу Visual Studio, он работает.

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

4b9b3361

Ответ 1

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

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

Ответ 2

Проблема

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

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

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

Решение

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

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

Ответ 3

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

Для завершения этой операции недоступно хранилище

ошибка в моем выпуске сборки.

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

Мой ответ основан на этом ответе.


Решение 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

Примечание "????" в предыдущем примере является программным именем операционной системы.

В 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 {path}\devenv.exe`
    

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

Обычно я запускаю настройку, как показано ниже.

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

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

new ParallelOptions { MaxDegreeOfParallelism = 1 }

Ответ 8

Ключ для меня: Мы внедрили огромный массив баз данных (тестирование заполнило его большим количеством данных) в приложение. Я не видел, чтобы эта проблема возникала, поскольку удаление Embedded Resource кипит должным образом и перемещение базы данных в папку для регресса.

Ответ 9

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

Ответ 10

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