Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I determine number of window handles an application is using?

Tags:

windows

winapi

What is the best way to determine how many window handles an application is using? Is there a tool or a WMI performance counter that I could use?

I would like to run up an app and watch a counter of some sort and see that the number of window handles is increasing.

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

I am running the above code and watching the "Handle Count" counter on the process, and it does not seem to be increasing. Is there something I am looking at incorrectly?

like image 484
adeel825 Avatar asked Oct 13 '08 12:10

adeel825


People also ask

How many handles is too many in windows?

Maximum Number of Handles Any process that has more than a ten thousand handles open at any given point in time is likely either poorly designed or has a handle leak, so a limit of 16 million is essentially infinite and can simply help prevent a process with a leak from impacting the rest of the system.

What is handle count in windows?

Handles provide a way for a process to refer to objects. A process can obtain handles to files, resources, message queues, and many other operating system objects. The operating system reclaims the memory associated with the process only when the handle count is zero.

Are window handles unique?

Yes. There are only a finite number of values a handle can be represented by, so Windows has to reuse them eventually.


2 Answers

Perfmon, which comes with your computer can do it. You can also add a column to your task manager processes tab (Handle Count).

Instructions for Perfmon

  1. Add a counter (click the +)
  2. Choose Process under Performance object
  3. Choose Handle Count under the counter list
  4. Choose your process from the instance list
  5. Click Add, click Close

To get the graph in range, you have to right-click it in the list, choose properties, and then choose the right scale (.1 or .01 would probably be right)

Edit (in response to added information): I think you just proved that creating RichTextBoxes doesn't result in Handles being allocated. I don't think it really needs one until you are editing the control and it might be smart enough to do that, since allocating too many resources for a control that isn't active would make it hard to have a lot of controls on a form (think about Excel, for example).

like image 89
Lou Franco Avatar answered Nov 15 '22 03:11

Lou Franco


Process Monitor is very handy in interactively monitoring all sorts of resources used by Windows processes.

Process Monitor is an advanced monitoring tool for Windows that shows real-time file system, Registry and process/thread activity.

Note - if you mean finding the information programatically, .Net provides access to all performance counters. You use the System.Diagnostics.PerformanceCounter Class like this:

PerformanceCounter PC=new PerformanceCounter();
PC.CategoryName="Process";
PC.CounterName="Handles";
PC.InstanceName="MyProc";
MessageBox.Show(PC.NextValue().ToString());
like image 40
gimel Avatar answered Nov 15 '22 03:11

gimel