Эта статья поможет устранить исключение нехватки памяти при наличии управляемого приложения, ориентированного на 64-разрядную версию Microsoft платформа .NET Framework 4.6.1.
Исходная версия продукта: платформа .NET Framework 4.6.1
Исходный номер базы знаний: 3152158
Симптомы
У вас есть управляемое приложение, предназначенное для 64-разрядной платформа .NET Framework 4.6.1. Это приложение выдает исключение нехватки памяти из среды CLR со следующим конкретным сообщением:
OutOfMemoryException: «Недостаточно памяти в указанном диапазоне адресного пространства для продолжения выполнения программы».
Причина
Это исключение нехватки памяти распространяется средой CLR, когда подсистема диспетчера кода не может выделить память в определенном диапазоне адресного пространства для заглушки перехода. (Эти заглушки перехода соответствуют методу, который вызывает библиотеки динамической компоновки (DLL), расположенные на 2 ГБ или более друг от друга в адресном пространстве.) В радиусе 2 ГБ от вызывающего метода должно быть место для хранения заглушки перехода для вызова 64-разрядного метода. Нет безопасного способа восстановления приложения после этой конкретной ошибки. Таким образом, состояние приложения после того, как оно соответствует этой ошибке, неизвестно, и его следует считать поврежденным. Единственный способ восстановления — перезапустить приложение.
Лоцман КБ — Недостаточно памяти
Обходной путь
Чтобы обойти эту проблему, используйте один из следующих методов настройки:
- Реализуйте параметр на уровне компьютера, добавив следующий раздел реестра:
- Расположение: HKEY_LOCAL_MACHINESOFTWAREMicrosoft.NETFramework
- Тип: DWORD
- Имя: NGenReserveForjumpStubs
- Значение: 00000005
Примечание. NGenReserveForJumpStubs Среда CLR резервирует процент адресного пространства для заглушки перехода рядом с каждым загруженным образом NGen. Если вы столкнулись с этим OutOfMemoryException , рекомендуется использовать значение 5 или больше.
Сведения для разработчиков
- Платформа .NET Framework кодирует вызовы методов как относительные 32-разрядные переходы по соображениям производительности. В 64-разрядной системе вызывающий и вызываемый могут находиться дальше, чем на 2 ГБ (в адресном пространстве). Так как он превышает диапазон адресов 32-разрядного смещения со знаком, .NET создаст заглушку перехода в пределах 2 ГБ от вызывающего объекта. Эта заглушка может затем сделать прыжок в длину в любое место в 64-разрядном адресном пространстве.
- Устранение рисков JIT и NGen немного отличается. Оба они резервировать дополнительное адресное пространство заранее, но точка, где это резервирование делается, отличается между ними.
- NGenReserveForJumpStubs — это процент от размера виртуального образа NGen (percentReserveForJumpStubs).
- Типичная заглушка прыжка — 12 байт. Дополнительные сведения см. в разделе JUMP_ALLOCATE_SIZE.
- Память выделяется и резервируется рядом с адресом, на который был загружен образ NGen (точный алгоритм — EEJitManager::EnsureJumpStubReserve. Память фиксируется, когда необходимо выделить заглушку перехода и когда нет другого подходящего адресного пространства.
- Ранее упомянутое устранение рисков не изменяет содержимое образов NGen. Образы NGen имеют одинаковый объем дискового пространства как с устранением рисков, так и без него.
- В настоящее время нет хорошего способа определить, когда приложение приближается к ограничению. Вы можете отслеживать, OutOfMemoryException чтобы определить, достаточно ли зарезервированного пространства.
- Вы можете получить OutOfMemoryException , даже если неиспользуемой памяти много, так как эта конкретная ошибка связана с доступностью памяти в радиусе 2 ГБ диапазона адресов вызывающего объекта.
- Не изменяйте значение CodeHeapReserveForJumpStubs по умолчанию , так как оно может не быть связано с описанной выше проблемой. Мы не видели случая, когда фактическому приложению нужно было бы изменить этот параметр в качестве обходного решения.
- Установка NGenReserveForJumpStubs более высокого значения может привести к снижению производительности и риску возникновения других тонких проблем.
Сведения для ИТ-пользователей
- Эта проблема также может возникать в других версиях платформа .NET Framework. Однако решение в настоящее время применимо только к платформа .NET Framework 4.6.1.
- Это редкая проблема, которая затрагивает только большие рабочие нагрузки с определенным шаблоном выполнения. Более 99 процентов всех рабочих нагрузок когда-либо будут сталкиваться с этой проблемой.
- После того как приложение выдает OutOfMemoryException объект , единственным рекомендуемым способом восстановления является перезапуск приложения.
Обратная связь
Были ли сведения на этой странице полезными?
Недостаточно памяти для продолжения выполнения программы
Источник: learn.microsoft.com
При запуске приложения или при сохранении выдает ошибку, что «недостаточно памяти для продолжения выполнения программы»?
при запуске приложения или при сохранении выдает ошибку, что «недостаточно памяти для продолжения выполнения программы». что делать в таком случае? у меня много картинок в приложении, может быть из за этого?
полностью папка с приложением весит 132 Мб, а конкретно программа (bindebug) весит 30 Мб
- Вопрос задан более трёх лет назад
- 486 просмотров
2 комментария
Простой 2 комментария
озу 4 гб
на ЖД доступно 170 из 232
Решения вопроса 0
Ответы на вопрос 1
Диспетчер задач врёт, у Вас ещё меньше памяти. Свопа осталось 62 мб, то есть если программа под распаковку картинки просит больше, то случится фейл, а языки с gc память резервируют крупными блоками. Картинки жрут чуть больше чем 4 байта на пиксель, гифки тоже для каждого кадра, тут уж сами считайте сколько это памяти. Что делать?
Правильный вариант раскошелится на память, цена вопроса на али около 1500р. Неправильный, затянуть пояс потуже. Увеличить своп, перейти на 32-битную винду, грохнуть дискорд и другие прожорливые приложения и ненужные службы. В крайнем случае кодить в легковесном редакторе, а отлаживать по старинке, выводом информации в лог.
Ответ написан более трёх лет назад
Нравится 1 4 комментария
Источник: qna.habr.com
Недостаточно памяти для выполнения запрошенного действия windows 7
В этой инструкции — о том, что делать, если при запуске какой-либо программы вы видите сообщение Windows 10, Windows 7 или 8 (или 8.1) о том, что системе недостаточно виртуальной или просто памяти и «Чтобы освободить память для нормальной работы программ, сохраните файлы, а затем закройте или перезапустите все открытые программы».
Постараюсь учесть все возможные варианты появления этой ошибки, а также рассказать о том, как ее исправить. В случае если вариант с недостаточным местом на жестком диске явно не про вашу ситуацию, вероятно, дело в отключенном или слишком маленьком файле подкачки, подробнее об этом, а также видео инструкция доступны здесь: Файл подкачки Windows 7, 8 и Windows 10.
О том, какой именно памяти недостаточно
Когда в Windows 7, 8 и Windows 10 вы видите сообщение о том, что недостаточно памяти, имеется в виду в первую очередь оперативная память и виртуальная, являющаяся, по сути, продолжением оперативной — то есть, если системе не хватает RAM, то она использует файл подкачки Windows или, иначе, виртуальную память. Некоторые начинающие пользователи ошибочно под памятью подразумевают свободное пространство на жестком диске компьютера и недоумевают, как это так: на HDD свободно много гигабайт, а система жалуется на нехватку памяти.
Причины, вызывающие ошибку
- Вы открыли очень много всего, в результате чего возникла проблема с тем, что на компьютере недостаточно памяти — как исправить эту ситуацию я рассматривать не будет, так как тут все ясно: закройте то, что не нужно.
- У вас действительно мало оперативной памяти (2 Гб и меньше. Для некоторых ресурсоемких задач может быть мало и 4 Гб RAM).
- Жесткий диск заполнен под завязку, соответственно на нем не остается достаточного места для виртуальной памяти при автоматической настройке размера файла подкачки.
- Вы самостоятельно (или с помощью какой-то программы оптимизации) настраивали размер файла подкачки (или отключили его) и он оказался недостаточным для нормальной работы программ.
- Какая-то отдельная программа, вредоносная или нет, вызывает утечку памяти (постепенно начинает использовать всю доступную память).
- Проблемы с самой программой, которая вызывает появление ошибки «недостаточно памяти» или «недостаточно виртуальной памяти».
Если не ошибаюсь, пять описанных вариантов являются наиболее распространенными причинами ошибки.
Как исправить ошибки, связанные с нехваткой памяти в Windows 7, 8 и 8.1
А теперь, по порядку, о том, как исправить ошибку в каждом из перечисленных случаев.
Мало RAM
Если на вашем компьютере небольшое количество оперативной памяти, то имеет смысл задуматься о покупке дополнительных модулей RAM. Память сейчас не дорогая. С другой стороны, если у вас совсем старый компьютер (и память старого образца), и вы подумываете о скором приобретении нового, апгрейд может быть и неоправданным — проще временно смириться с тем, что не все программы запускаются.
О том, как самостоятельно узнать какая память нужна и сделать апгрейд я писал в статье Как увеличить оперативную память RAM на ноутбуке — в общем-то, все описанное там применимо и к настольному ПК.
Мало места на жестком диске
Несмотря на то, что объемы сегодняшних HDD внушительны, самому нередко приходилось видеть, что у пользователя из терабайта свободен 1 гигабайт или около того — подобное вызывает не только ошибку «недостаточно памяти», но и приводит к серьезным тормозам при работе. Не стоит доводить до этого.
Об очистке диска я писал в нескольких статьях:
Ну и главный совет — не стоит хранить множество фильмов и другого медиа, которое вы не будете слушать и смотреть, игр, в которые больше не станете играть и аналогичных вещей.
Настройка файла подкачки Windowsпривела к появлению ошибки
Если вы самостоятельно настраивали параметры файла подкачки Windows, то есть вероятность, что именно эти изменения привели к появлению ошибки. Возможно, вы даже не делали этого вручную, а постаралась какая-то программа, предназначенная для оптимизации быстродействия Windows. В таком случае, вам, возможно, следует увеличить файл подкачки или включить его (если он был отключен). Некоторые старые программы вообще не запустятся с отключенной виртуальной памятью и всегда будут писать о ее нехватке.
Во всех этих случаях рекомендую к ознакомлению статью, в которой подробно описано, как и что делать: Как правильно настроить файл подкачки Windows.
Утечка памяти или что делать, если отдельная программа забирает всю свободную RAM
Случается, что какой-то отдельный процесс или программа начинает интенсивно использовать оперативную память — это может быть вызвано ошибкой в самой программе, вредоносным характером ее действий или каким-либо сбоем.
Определить, нет ли такого процесса можно с помощью диспетчера задач. Для его запуска в Windows 7 нажмите клавиши Ctrl + Alt + Del и выберите диспетчер задач в меню, а в Windows 8 и 8.1 нажмите клавиши Win (клавиша с эмблемой) + X и выберите «Диспетчер задач».
В диспетчере задач Windows 7 откройте вкладку «Процессы» и отсортируйте по столбцу «Память» (нужно кликнуть по имени столбца). Для Windows 8.1 и 8 воспользуйтесь для этого вкладкой «Подробности», которая дает наглядное представление обо всех процессах, запущенных на компьютере. Их также можно отсортировать по количеству используемой оперативной и виртуальной памяти.
Если вы видите, что какая-то программа или процесс использует большое количество RAM (большое — это сотни мегабайт, при условии, что это не редактор фото, видео или что-то ресурсоемкое), то стоит разобраться, почему так происходит.
Если это нужная программа: повышенное использование памяти может быть вызвано как обычной работой приложения, например, при автоматическом обновлении, или операциях, для которых программа и предназначена, так и сбоями в ней. Если вы видите, что программа все время использует странно большое количество ресурсов, попробуйте переустановить ее, а если это не помогло — поискать в Интернете описание проблемы применительно к конкретному ПО.
Если это неизвестный процесс: возможно, это что-то вредоносное и стоит проверить компьютер на вирусы, есть также вариант, что это сбой какого-либо системного процесса. Рекомендую поиск в Интернете по имени этого процесса, для того, чтобы разобраться в том, что это и что с этим делать — скорее всего, вы не единственный пользователь, у кого возникла такая проблема.
В заключение
Помимо описанных вариантов, есть еще один: ошибку вызывает именно экземпляр программы, которую вы пытаетесь запустить. Имеет смысл попробовать загрузить ее из другого источника или почитать официальные форумы поддержки этого программного обеспечения, там тоже могут быть описаны варианты решения проблем с недостаточностью памяти.
Источник: onecomp.ru