Имейте приложение с утечкой GDI, которая в конечном итоге поразит 10 000 выделенных объектов GDI и выйдет из строя. Я попытался увеличить GDIProcessHandleQuota до 20 000, но программа все равно аварийно завершила работу, когда достигла 10 000 объектов. В настоящее время мы работаем над исправлением этой утечки, но из любопытства - есть ли способ увеличить лимит GDI для одного процесса? Или 10k - это жесткий лимит для отдельного приложения?
Каков верхний предел объектов GDI для одного процесса в Windows 7?
Ответы (3)
Есть решение, которое может сработать. Здесь я имею дело с некорректным приложением поставщика, которое выделяет тонны объектов GDI, и это решение позволяет ему работать большую часть времени ...
Do
reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems" /v windows
Найдите SharedSection=
, который должен состоять из 3 цифр, разделенных запятыми. Увеличивайте среднее число на 1024 за раз и посмотрите, решит ли это вашу проблему. Вы контролируете количество "кучи рабочего стола" с помощью этой переменной, которая в прошлом позволяла мне запускать некорректно работающий GDI.
См. KB184802 для получения дополнительной информации. Выполните поиск SharedSection, чтобы найти соответствующую часть страницы.
10 КБ - жесткий лимит.
Объекты GDI представляют ресурсы интерфейса графического устройства, такие как шрифты, растровые изображения, кисти, перья и контексты устройств (поверхности рисования). Как и для объектов USER, оконный менеджер ограничивает процессы до 10 000 объектов GDI [...]
У Марка Руссиновича есть серия статей, в которых подробно рассматриваются различные ограничения в Windows. Вы можете найти эти два полезными:
- Расширяя границы Windows: объекты USER и GDI - часть 1
- Расширяя границы Windows: объекты USER и GDI - часть 2
Еще одна хорошая статья от Раймонда Чена:
10K is a hard limit.
это кажется неправдой. Не могли бы вы добавить подробную информацию о связи ограничения, о котором вы говорите, в инструкции в ответе JimR
- person Wolf; 14.01.2015
Я могу увеличить количество своих объектов GDI с 10000 до 15000, изменив ТОЛЬКО GDIProcessHandleQuota, но для этого требуется перезагрузка. Мне не пришлось менять значения SharedSection, требовалась только перезагрузка.
Хотя 10000 кажется большим числом, мое приложение имеет большой пользовательский интерфейс с множеством кнопок, кистей, изображений, значков и т. Д. После запуска приложения количество объектов увеличивается только в том случае, если пользователь делает что-то, заслуживающее увеличения. Из приложения не поступают объекты GDI. Чтобы протестировать свое решение, я добавил метод «утечки», чтобы я мог наблюдать в диспетчере задач, что происходило, когда количество объектов GDI превышало различные пределы.
GDIProcessHandleQuota
до20,000
. Пришлось перезапустить систему после изменения реестра. Обновлен ключ реестра наHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\GDIProcessHandleQuota
- person Abhinav Galodha   schedule 07.03.2018