FC55: Half billion object challenge

How good is your dotnet memory dump analyzer?

Still working on PerfView improvements, so far I’ve got 25 gb/40 gb dumps, but there are not enough objects in the dump. I thought it would be interesting to create some fake data to challenge dotnet memory dump analyzers.

Here is the code for generating half billion objects: boxed integers.

Each boxed integer is 24 bytes (64-bit), but there is also a pointer pointing to it, so it’s really 32 bytes per object. Total managed heap should be about 16 gb.

First, I tried PerfView’s memory dump analyzer:

PerfView has a hard coded limitation of 128 × 1024 × 1024 objects. There seems to be no way around it, except modifying it source code.

Next I tried Visual Studio Diagnostic Analysis. It managed to scan the whole heap:

Memory usage is around 30 gb in msvsmon.exe (remote debugger), not too bad. The information here is accurate and complete, but there does not seem to be object reference.

Next I tried my modified version of PerfView. It managed to scan all 500 million objects.

We have 485 million boxed integers here. Notice when there are too many objects, PerfView performs sampling to reduce data size, so numbers are not 100% accurate.

Here is yet another dump analyzer from Microsoft called DebugDiag. I can’t get the latest version to work, version 2.2.0.14 crashed:

You can’t use LINQ to process such large data set.