So you thought it was over, eh? But wait, there is more! My vacation is not over yet! :D
In the last blog entry I explained the Suspend MSec and the Pause MSec columns in GCStats and how they are calculated. In this entry I'd like to talk about a few...

In the last blog entry we looked at a particular GC trigger reason - InducedNotForced GCs. There are 2 other triggered reasons for induced GCs are:
InducedLowMemory - GC subscribes to the low memory notification from the OS and when the OS notifies...

Before we continue from where we left off in the last blog entry I wanted to give a performance tip on managed memory analysis. As some of you who have already tried out Perfview you probably noticed it has a Heap Snapshot feature (in the PerfView UI...

A lot of people have mentioned to me that I have not posted anything for a long time. I do realize it and do appreciate being asked to write more. Well, it’s end of year and I am starting vacation so I thought I’d write something light that...

Recently I did a few videos for the popular "Defrag Tools" series on Channel9. They are just talking about pretty basic things about doing managed memory investigations so I'd imagine for most of you it's something you already know. However, you can feel...

This is now live from CLR's team blog. This paints a more complete picture than what I talked about in my "What's new in 4.5 GC" Channel 9 interview which mostly focused on Server Background GC.
http://blogs.msdn.com/b/dotnet/archive/2012/07/20/the...

Last time I posted a "So, what's new" entry was when we release 4.0 ~3 years ago (can't believe it's already been that long..). Now I get to talk about what's new in the 4.5 GC. Actually I just talked about this with Channel 9 and here's the link to the...

I’ve talked about finalization before but based on seeing questions related to it it appears that it deserves some clarification.
First of all, finalization is a mechanism we provide in the CLR wheras Dispose is a programming pattern. See...

Wow, it’s been almost a year since I last blogged J We just shipped CLR V4.0. Yay!
An internal email thread prompted me to write this blog entry – one very powerful tool I wanted to point out when you need to debug/investigate issues is your debugger...

PDC 2008 happened not long ago so I get to write another “what’s new in GC” blog entry. For quite a while now I’ve been working on a new concurrent GC that replaces the existing one. And this new concurrent GC is called “background GC”.
First of all...

As 64-bit machines become more common, the problems we need to solve also evolve. In this post I’d like to talk about what it means for the GC and the applications’ memory usage when we move from 32-bit to 64-bit.
One big limitation of 32-bit is...

I was making some code changes today and thought this was interesting to share. As you know, the WeakReference class has a getter and a setter method to get and set the Target which is what the weakref points to. See Using GC Efficiently – Part 3 for...

.NET CLR Memory\% Time in GC counter and !runaway on thread(s) doing GC .
The 2 common ways people use to look at the time spent in GC are the % Time in GC performance counter under .NET CLR Memory, and the CPU time displayed by the !runaway debugger...

Both the !SOS.gchandles command (added in CLR 2.0) and the .NET CLR Memory\# GC Handles counter show you the number of GC handles you have in your process.
The # GC Handles counter is one of the rare counters in the .NET CLR Memory category that doesn...

Managed Heap Size
We have both .NET CLR Memory perf counters and SoS extensions that report manged heap size related data.
Difference 2
There are a few .NET CLR Memory counters that are related to the managed heap size:
# Total Committed Bytes...

So, there are many perf tools and some of them report either the same or the same type of data. I want to talk about various differences between the ones related to managed heap investigation. This is not supposed to cover everything..just the ones I...

These namespaces were introduced in CLR 2.0. For example for the
GCHeap::GcCondemnedGeneration
symbol, it's WKS::GCHeap::GcCondemnedGeneration for Workstation GC and SVR::GCHeap::GcCondemnedGeneration for Server GC (if you are reading the...

Many people know Patrick Dussud by his outstanding work on Garbage Collection. But did you know he was one of the founders of the CLR? In his intro blog entry he talks about how the CLR came to life. I am sure it will be a great read for those of you...

Last time I talked about the hang scenario where your process is taking 0 CPU and the CPU is taking by other process(es) on the same machine.
The next scenario is your process is taking 0 CPU and the CPU is barely used by other processes.
...

!address is a very powerful debugger command. It shows you exactly what your VM space looks like. If you already got the output from the !sos.eeheap -gc command (refer to this article for usage on sos), for example:
0:003> !eeheap -gc Number of...

We have a new MSDN article out in the November issue that talks about investigating managed memory issues.
http://msdn.microsoft.com/msdnmag/issues/06/11/CLRInsideOut/default.aspx?loc=en
Take a look and let me know what you think.
Oh, and it...

Defining “hang” is a good place to start.
When people say “hang” they could mean all sorts of things. When I say “hang” I mean the process is not making progress – the threads in the process are either blocked (eg. deadlocked, or not scheduled because...

So far I’ve never written a blog entry that gives out philosophical advices on doing performance work. But lately I thought perhaps it’s time to write such an entry because I’ve seen enough people who looked really hard at some performance counters (often...

Indeed what I do is very much like the job of the janitors – like the ones who clean your building, or janitors you see at a food court, or yourself when you are taking care of garbage at your house. Doubtful you say? Let me prove it to you.
Finding...