3

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

Ошибка чтения ListingCommandEdit-> Items.Строки: Системная ошибка. Код: 8. Недостаточно памяти для обработки этой команды.

Последний текст является общим текстом ошибки для системной ошибки ERROR_NOT_ENOUGH_MEMORY . Теперь вот проблема: у меня много памяти.

При открытии Process Explorer отображается 650 МБ свободной оперативной памяти и еще 200 МБ в кэш-памяти. Файл подкачки имеет еще 1,5 ГБ в соответствии с Process Explorer. Диск, содержащий файл подкачки (C:), имеет 137 ГБ свободного места.

Моя следующая мысль была о ручках: возможно, там есть предел? У меня их 30 тысяч, опять же, по словам PE, но приложение для быстрого тестирования говорит, что я могу выделить еще как минимум 30 тысяч.

Итак ... из чего именно я вышел? Да, много работы, но если у меня есть ресурсы, доступные для большего, то я не ожидаю появления ошибок.

2 ответа2

3

По-видимому, в Windows есть нечто, называемое "куча рабочего стола", которая по умолчанию составляет 3 МиБ. Здесь хранится информация о таких вещах, как HWND (окна, кнопки, текст, поля редактирования, флажки, переключатели, вы называете это имя) - если вы исчерпаете это, вы не сможете больше создавать Windows, и, таким образом, все перестает работать ,

Это установленный предел - ничего полезного, например, расширение кучи не происходит. К счастью, это можно перенастроить за счет перезагрузки. Это настройка реестра для HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems\Windows.

Если вам нужно знать, влияет ли это на вас, воспользуйтесь инструментом dheapmon от Microsoft, доступным здесь:

http://www.microsoft.com/downloads/details.aspx?familyid=5cfc9b74-97aa-4510-b4b9-b2dc98c8ed8b&displaylang=en

Лучшая статья о том, как его запустить:

http://blogs.msdn.com/b/alejacma/archive/2008/07/29/how-to-use-dheapmon-exe-to-troubleshoot-desktop-heap-issues.aspx

И, наконец, как настроить этот раздел реестра, чтобы все заработало:

http://blogs.msdn.com/b/ntdebugging/archive/2007/01/04/desktop-heap-overview.aspx

1

Вы запустили тест памяти? Memtest является одной из таких утилит.

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

Он будет запрашивать X байтов, и если он не получит требуемое количество, он будет предполагать, что его недостаточно, а не возникнет проблема с памятью.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .