Поиск и устранение неисправностей ERROR_NOT_ENOUGH_MEMORY

string[] values = { "a", "b", "c" };
int i = 0;
var t = (from v in values
select new { Index = i++, Value = v}).ToList();
5
задан Josh Kelley 21 September 2009 в 14:14
поделиться

3 ответа

Виновником в данном случае был CreateCompatibleBitmap. По-видимому, Windows может применять довольно строгие общесистемные ограничения на память, доступную для зависящих от устройства растровых изображений (см., например, это обсуждение списка рассылки),даже если в вашей системе много памяти и много ресурсов GDI. (Эти общесистемные ограничения, по-видимому, связаны с тем, что Windows может выделять зависящие от устройства растровые изображения в памяти видеокарты.)

Решение состоит в том, чтобы просто использовать вместо этого устройства-независимые растровые изображения (DIB) (хотя они могут не обеспечить такую же хорошую производительность). В этой статье базы знаний описывается, как выбрать оптимальный формат DIB для устройства.

Другие кандидаты на ограничение ресурсов (из чужих ответов и моих собственных исследований):

  • Ресурсы GDI (из этого ответа) - легко проверяются с помощью GDIView
  • Фрагментация виртуальной памяти (из этого ответа)
  • Куча рабочего стола - см. здесь или здесь
3
ответ дан 13 December 2019 в 22:11
поделиться

Проверьте все возможности.

За проблемами GDI можно следить с помощью бесплатной утилиты GDIView . Это единственный файл, который пользователи могут запустить без установщика.

Также установите ProcessExplorer на соответствующий компьютер.

Если у вас нет доступа к аппарату, попросите пользователя сделать скриншоты состояния, отслеживаемого приложениями. Скорее всего, это даст вам подсказку.

4
ответ дан 13 December 2019 в 22:11
поделиться

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

3
ответ дан 13 December 2019 в 22:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: