Detecting Resource Leaks | CodeGuru

Detecting Resource Leaks

Environment: Windows NT, Windows 2000, Windows XP I was working on a project and it was the moment to deliver the product to the client. I had used my own developed memory leak tool to test the application for memory leaks. My utility passed the test and I was comfortable that there were no memory […]

Written By
CodeGuru Staff
CodeGuru Staff
Mar 12, 2003
3 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

Environment: Windows NT, Windows 2000, Windows XP

I was working on a project and it was the moment to deliver the product to the client. I had used my own developed memory leak tool to test the application for memory leaks. My utility passed the test and I was comfortable that there were no memory leaks. But this project was very important and I wanted to be one hundred percent sure that the application did not leak any memory. And, what about handle leaks? My utility does not detect any handle leaks and I was not sure whether my application was leaking handles.

My problem was simple. I did not need a tool to troubleshoot to locate the memory leaks in my code but just wanted to verify that my application was not leaking memory and handles. I started the task manager and observed the memory columns to check the memory usage statistics and ran my application. The memory usage of the application increased and stabilized after some time. I was a bit comfortable but not 100% comfortable as I had no information about the handle leaks in my application.

I searched the net for a suitable free tool to suit my needs. There were many memory leak detection tools, but none for handle leaks. My search ended at the MSDN site, where I found the answer to all of my queries. My application was to run on windows 2000 and windows XP. I came to know that the most reliable method on this case is the perfmon tool bundled with Windows NT onwards. I just needed to check the status of private bytes and handle count counters for my process using perfmon.

Well, I ran the tool and was satisfied to see that the private bytes count (process memory usage) did not increase and stabilized soon. However, I was horrified to find that the handle count was increasing continuously. Clearly, my application was leaking handles. After a few hours of struggling, I fixed the handle leaks which were mainly due to Registry open calls. After fixing the handle leaks, the perfmon window was as in the following figure.

Here is the detailed process to watch the memory and handle counters for your process. This is applicable for Windows 2000 but should be same for Windows NT and Windows XP, as well.

  • Open perfmon by clicking Start, Settings, Control Panel, Administrative Tools, Performance.
  • Click the Add counters tool box(the tool with the + sign). It will display the Add Counter dialog box.
  • Check the ‘Use local computer counters’ radio button.
  • Select Process under the ‘Performance Object:’ drop-down combo box.
  • Select the ‘Select counters from list’ radio button and select ‘Handle Count’ and ‘Private Bytes’ from the combo box. This box is a multiline select combo box.
  • Select the ‘Select instances from list’ radio button and select your application from the combo box just below it.
  • Press the Add button, followed by the Close button.
Advertisement

This will open the perfmon window. You will see two graphs each for memory (private bytes) and handle count. Run your application and you will see the present status of memory usage and open handles for you process. If any of the counter values increase continuously without being stabilized, there are memory/handle leaks in the application.

There are other counters that are worth watching, especially if your application has a performance hit and needs troubleshooting.

CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.