I know Sysinternals Process Explorer has been recommended in several blogs for quite some time. While most developers are familiar with this Task Manager replacement, few seem to leverage all it has to offer. Where I find it most useful is in the Process View (you have to double click the process to get there). Once there check out the .NET tab (.NET assemblies only) which provides some great information about what the process is doing. I personally like to monitor the .NET CLR Data information to help me better understand memory usage during runtime. If you have a memory leak in a .NET assembly this can be extremely helpful. I used it to monitor Garbage Collection and Generation Heap Size as I navigated one application and found clues which assisted me to eliminate a nasty leak. If you are not familiar with how the Garbage Collector operates this a good way to learn. I also recommend you check out this