Каков верхний предел для объектов GDI для одного процесса в Windows 7?



Есть приложение с утечкой GDI, которое в конечном итоге попадет в 10 000 выделенных объектов GDI и аварийно завершит работу. Я попытался увеличитьGDIProcessHandleQuota до 20 000, но программа все равно отказала, когда она достигла 10 000 объектов. В настоящее время мы работаем над исправлением этой утечки, но из любопытства-есть ли способ увеличить предел GDI для одного процесса? Или 10k-это жесткий предел индивидуального приложения?

659   3  

3 ответов:

Есть решение, которое может сработать. Я имею дело с ненадлежащим приложением поставщика, которое выделяет тонны объектов GDI, и это решение позволяет ему работать большую часть времени...

Do

reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems" /v windows

Найдите SharedSection=, которое должно состоять из 3 чисел, разделенных запятыми. Увеличьте среднее число на 1024 за раз и посмотрите, решит ли это вашу проблему. Вы контролируете количество "кучи рабочего стола" с помощью этой переменной, которая в прошлом позволила мне получить неправильный GDI бегущий.

Посмотрите на KB184802 для получения дополнительной информации. Найдите раздел SharedSection, чтобы найти соответствующую часть страницы.

10K-это жесткий предел.

Объекты GDI представляют ресурсы графического интерфейса устройства, такие как шрифты, растровые изображения, кисти, перья и контексты устройства (поверхности рисования). Как и для пользовательских объектов, оконный менеджер ограничивает процессы не более чем 10 000 объектами GDI [...]

У Марка Русиновича есть ряд статей, которые подробно описывают различные ограничения в Windows. Вы можете найти эти два полезных:

Еще одна хорошая статья от Раймонда Чена:

Я могу увеличить мои объекты GDI с 10000 до 15000, изменив только GDIProcessHandleQuota, но это требует перезагрузки, чтобы вступить в силу. Мне не нужно было менять значения SharedSection, требовалась только перезагрузка.

В то время как 10000 кажется большим числом, мое приложение имеет большой пользовательский интерфейс с большим количеством кнопок, кистей, изображений, иконок и т. д. Как только приложение запускается, количество объектов увеличивается только в том случае, если пользователь делает что-то, что заслуживает увеличения. Нет объектов GDI протекают из приложения. Чтобы проверить свое решение, я добавил метод "утечки", чтобы я мог наблюдать в диспетчере задач, что происходит, когда количество объектов GDI увеличивается за различными пределами.

Comments

    Ничего не найдено.