A bit of history
In .NET 3.0 we introduced a GC.GetGCMemoryInfo
API for library code to get memory load related things (this was used in ArrayPool for example) so it exposed things library folks wanted at the time. In 5.0 I got requests from folks to monitor more things about the GC. Instead of adding a bit of info each time someone asks, I really thought about the kinds of things that would help with monitoring and diagnostics and expanded the info provided by this API significantly. It also has a new overload, documented here. The returned GCMemoryInfo struct has many more properties.
Goals of the updated API
You can view the new GetGCMemoryInfo
API as a rich sampling method. Many people enjoyed using perf counters in the old days. The problem with perf counters was
- The info was pretty primitive
- It’s hard to correlate the info for the same GC since you get counters individually.
- is less of a problem just because most of the time folks didn’t care about individual GCs, they just cared about a trend. And counters were really just used for monitoring, not for diagnostics 'cause they simply didn’t provide enough info to look at the GCs in any kind of depth. I wanted the new API to be used for both. There was quite a bit of discussion on the API proposal and with help from other people on my team I think I landed at an API that I’m quite happy about. Big kudos to Noah for suggesting to take the kind of GC as a parameter which makes it still very useful for understanding what’s going on even when you are monitoring with very long intervals which was a big problem with perf counters – you get whatever values the last GC happened to set which meant if you only sample once in a long time (like once every minute), it’s based on luck whether you catch a long GC pause 'cause that GC could easily not be the last GC that interval caught. By specifying the GC kind if you do sample only once in a long time, you could always get the last full blocking GC (
GCKind.FullBlocking
) which has the longest GC pause because you can specific ask about that kind of GCs.
#getgcmemoryinfo api #dotnet #dotnet core