Могут ли утечки GDI из одного процесса повлиять на другие процессы?

у нас возникают утечки ресурсов GDI, которые время от времени вызывают "Win32Exception Недостаточно памяти для обработки этой команды" (связанный вопрос).

Наше приложение состоит из надстройки Word и приложения C #. Может ли утечка в надстройке Word удалить ресурсы из приложения C #? Мы видели, как приложение вылетало из-за некоторых не связанных с надстройкой проблем.

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


person Ignacio Soler Garcia    schedule 20.11.2015    source источник
comment
Да, объекты GDI выделяются из кучи рабочего стола, которая используется всеми процессами, запущенными на этом рабочем столе. Размер ограничен 64 КБ объектов на интерактивном рабочем столе из соображений совместимости приложений. Но вы не можете исчерпать его только одним некорректным процессом, который протекает, требуется несколько. Так сомнительно, что вы нашли настоящую причину. В противном случае это очень легко увидеть в диспетчере задач, используйте View ›Select Columns, чтобы добавить столбец GDI Objects.   -  person Hans Passant    schedule 20.11.2015


Ответы (1)


Точное количество может зависеть от версии Windows, но обычно это теоретический предел в 65 536 за сеанс. На самом деле это меньше (например, 16 384 в Windows 2000).

Также существует ограничение на 10 000 дескрипторов для каждого процесса, хотя его можно глобально изменить с помощью параметра реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\GDIProcessHandleQuota. Хотя этот параметр не должен изменяться приложением, поскольку это глобальный параметр для компьютера.

MSDN - объекты GDI

Old New Thing - Почему такое ограничение на количество оконных дескрипторов для каждого процесса 10 000?

person Chris Chilvers    schedule 20.11.2015