Что такое Windows "объекты USER" - PullRequest
11 голосов
/ 15 мая 2009

Я пытаюсь отследить проблему в нашем коде MFC, которая выглядит как проблема ограничения ресурсов. Память и процессор выглядят нормально. Согласно вкладке процессов в диспетчере задач наши объекты GDI выглядят в соответствии с другими приложениями, но наши объекты USER в 10 раз больше, чем другие приложения.

Что такое «объект USER» и каковы ограничения?

Ответы [ 3 ]

12 голосов
/ 15 мая 2009

Читать все об этом здесь :

Категории объектов

Система предоставляет три категории объектов: пользователь, интерфейс графического устройства (GDI) и ядро. Система использует объекты пользователя для поддержки управления окнами, объекты GDI для поддержки графики и объекты ядра для поддержки управления памятью, выполнения процессов и межпроцессного взаимодействия (IPC). Информацию о создании и использовании определенного объекта см. В соответствующем обзоре.

Объекты пользователя

Объекты пользовательского интерфейса поддерживают только один дескриптор на объект. Процессы не могут наследовать или дублировать дескрипторы пользовательских объектов. Процессы в одном сеансе не могут ссылаться на дескриптор пользователя в другом сеансе.

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

HKEY_LOCAL_MACHINE \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Windows NT \ CurrentVersion \ Windows \ USERProcessHandleQuota

Это значение может быть установлено в диапазоне от 200 до 18 000.

11 голосов
/ 15 мая 2009

Вот «классическая» статья MSDN: Дайте мне ручку, и я покажу вам объект

В прошлый раз, когда я отслеживал утечки объектов Windows (что, я подозреваю, у вас есть) Process Explorer был удобен (хэндл?). На нижней панели могут отображаться некоторые выделенные системные объекты, а также может быть простой подсчет объектов USER, GDI и т. Д.

Настольная куча , представляющая собой пул памяти, в котором живут реальные «вещи», которые представляет дескриптор (по крайней мере, некоторые дескрипторы, по крайней мере, дескрипторы ядра). Иногда это не столько количество выделенных вами дескрипторов, сколько объем памяти, используемый каждым объектом под этим дескриптором. Вы можете отладить кучу таким образом . Это боль для установки.

1 голос
/ 15 мая 2009

Я не знаю что это за , но я знаю, что они включают дескрипторы окон.

Для оконных дескрипторов существует максимальный системный максимум около 32000 и максимальный для каждого процесса 10000. (Это может быть просто предел объекта USER, а не просто дескрипторы окна.)

Количество дескрипторов окон может быть очень большим, если каким-то образом вы пропускаете дескрипторы окон или если вы используете огромное количество окон. (Обратите внимание, что даже простые элементы управления, такие как текстовая метка, используют дескриптор одного окна.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...