ОС
Об'єкти USER і GDI
Об'єкт GDI
Об'єкти GDI являють собою ресурси інтерфейсу графічного пристрою, такі як шрифти, точкові малюнки, кисті, пір'я і контексти пристроїв (поверхні конструктора). Як і у випадку з об'єктами USER, диспетчер вікон обмежує процеси використанням не більше ніж 10000 об'єктів GDI, що ви можете перевірити за допомогою Testlimit з параметром -g:
Щоб побачити, скільки об'єктів GDI використовує процес, ви можете звернутися до сторінки Performance в діалоговому вікні властивостей процесу в Process Explorer, а також додати колонку GDI Objects в Process Explorer, щоб переглянути параметри використання об'єктів GDI для процесів:
Як і у випадку з об'єктами USER, 16-розрядна функціональна сумісність означає, що об'єкти GDI мають 16-розрядні ідентифікатори, обмежуючи їх кількість 65535 екземплярами на сеанс. Ось як виглядає робочий стіл після того, як Testlimit досяг цього обмеження на 64-розрядній системі Windows Vista:
Зверніть увагу, що кнопка «Пуск» знаходиться в лівому нижньому кутку, тоді як інша частина панелі завдань знаходиться у верхній частині екрана. Робочий стіл став чорним, а бічна панель втратила більшість своїх кольорів. У вас це може виглядати інакше, але ви все одно можете побачити, які забавні речі починають відбуватися в таких випадках, позбавляючи вас можливості нормально взаємодіяти з робочим столом. Ось як став виглядати екран, після натиснення на кнопку «Пуск»:
На відміну від об'єктів USER, об'єкти GDI не нараховуються з куп робочого столу; натомість на системах Windows XP і Windows Server 2003, на яких не встановлені служби терміналів, вони розподіляються із загального вивантажування пулу; на всіх інших системах вони розподіляються з пулу сеансів, для кожного сеансу окремо.
Команда відладчика ядра "!vm 4" відображає загальну інформацію про віртуальну пам'ять, включаючи інформацію про сеанс в кінці. На системі Windows XP вона показує, що вивантажуваний пул сеансу не використаний:
Ті ж результати відображаються і на Windows Server 2003 без встановлених служб терміналів:
Тому обмеженням пам'яті для об'єктів GDI служить обмеження вивантажування пулу. Однак, коли на тій же системі Windows Server 2003 служби терміналів встановлені, в інформації про використання пулу ненульового сеансу можна побачити, що об'єкти GDI беруться з пулу сеансу:
У наведених вище результати роботи команди "!vm 4" також показані максимальний розмір вивантажування пулу сеансу і розмір пулу сеансу, але на Windows Vista і в наступних системах максимум вивантажується пулу сеансу і розмір простору сеансу не відображаються, оскільки вони є змінними величинами. Показники використання вивантажування пулу сеансу на цих системах обмежуються або обсягом адресного простору, до якого вони можуть вирости, або межею виділення системних ресурсів, залежно від того, який параметр буде менший. Ось результати виконання цієї команди на системі Windows 7, що відображають поточні показники використання вивантажування пулу сеансів:
Цілком очікувано, що головний інтерактивний сеанс, Session 1, використовує велику частину вивантажування пулу сеансу.
Можна використовувати інструмент Testlimit з параметром "-g 0", щоб побачити, що відбувається, коли закінчується місце для зберігання об'єктів GDI. Число, що визначене після -g є розміром об'єктів точкових малюнків GDI, що виділяються Testlimit, при цьому число 0 вказує Testlimit виділяти настільки великі об'єкти, наскільки це взагалі можливо. Ось результати роботи Testlimit на 32-розрядної системі Windows XP: