Как определить количество дескрипторов окон, используемых приложением? - PullRequest
4 голосов
/ 13 октября 2008

Каков наилучший способ определить, сколько дескрипторов окна использует приложение? Можно ли использовать какой-либо инструмент или счетчик производительности WMI?

Я бы хотел запустить приложение, посмотреть какой-нибудь счетчик и увидеть, что количество дескрипторов окна увеличивается.

for (int i=0; i < 1000; i++)
{
    System.Threading.Thread.Sleep(1000);
    RichTextBox rt = new RichTextBox();
    rt.Text = "hi";
    this.Controls.Add(rt);
}

Я запускаю приведенный выше код и наблюдаю за счетчиком «Handle Count» в процессе, и он, похоже, не увеличивается Есть что-то, на что я смотрю неправильно?

Ответы [ 4 ]

9 голосов
/ 13 октября 2008

Perfmon, который поставляется с вашим компьютером, может это сделать. Вы также можете добавить столбец на вкладку процессов диспетчера задач (Handle Count).

Инструкция для Perfmon

  1. Добавить счетчик (нажмите +)
  2. Выберите Process в объекте Performance
  3. Выберите количество ручек в списке счетчиков
  4. Выберите ваш процесс из списка экземпляров
  5. Нажмите Добавить, нажмите Закрыть

Чтобы получить график в диапазоне, необходимо щелкнуть его правой кнопкой мыши в списке, выбрать свойства, а затем выбрать правильный масштаб (.1 или .01, вероятно, будет правильным)

Редактировать (в ответ на добавленную информацию): я думаю, вы только что доказали, что создание RichTextBoxes не приводит к выделению дескрипторов. Я не думаю, что он действительно нужен, пока вы не редактируете элемент управления, и он может быть достаточно умен, чтобы сделать это, поскольку выделение слишком большого количества ресурсов для неактивного элемента управления затруднит создание большого количества элементов управления на формы (например, об Excel).

3 голосов
/ 13 октября 2008

Process Monitor очень удобен для интерактивного мониторинга всех видов ресурсов, используемых процессами Windows.

Process Monitor - это расширенный инструмент мониторинга для Windows, который в режиме реального времени показывает файловую систему, реестр и активность процессов / потоков.

Примечание. Если вы хотите найти информацию программным путем, .Net предоставляет доступ ко всем счетчикам производительности. Вы используете System.Diagnostics.PerformanceCounter Класс, подобный этому:

PerformanceCounter PC=new PerformanceCounter();
PC.CategoryName="Process";
PC.CounterName="Handles";
PC.InstanceName="MyProc";
MessageBox.Show(PC.NextValue().ToString());
0 голосов
/ 30 сентября 2009

Perfmon или диспетчер задач не могут дать вам количество дескрипторов WINDOW, используемых процессом, только общее количество дескрипторов всех типов (файлов, потоков и т. Д.).

Лучшая информация, которую я могу найти по теме, - это эта запись, которая указывает, что счетчик дескриптора окна для процесса может быть определен путем перечисления всех дочерних окон главного окна процесса.

0 голосов
/ 13 октября 2008

Количество дескрипторов, отображаемых диспетчером задач, такое же, как у PerfMon

Инструмент ProcessExplorer от sysinternals может перечислять различные типы дескрипторов + их имена, используемые процессом, и вы можете получить хорошую идею, просмотрев этот список о составе дескрипторов, используемых вашей программой.

Но я боюсь, что это не сводит с ума эти подсчеты типа ручки для вас.

Для просмотра фактических дескрипторов и их типов с помощью ProcessExplorer - View - показать представление нижней панели - дескрипторов.

Вы также можете использовать какой-нибудь инструмент шпионских окон, который показывает все окна в системе, например Microsoft spy ++ или Managed Spy ++ (http://msdn.microsoft.com/en-us/magazine/cc163617.aspx)

Это позволит вам увидеть, создаются ли ваши окна.

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