Что такое Windows "USER objects"

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

Что такое "USER-объект" и каковы пределы?

Ответ 1

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

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

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

Ответ 2

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

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

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

Пользовательские объекты

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

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

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\USERProcessHandleQuota​​p >

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

Ответ 3

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

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

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