Thanks Matthew :^)
My goal was really to show that compiling and debugging the Core CLR is not that complicated. It really helped me to understand how parts of it are working (GC to name it) when drilling into the C++/macros source code gets complicated. This is also why I provided Maoni’s recording links at the end so the reader could continue the journey on her/his own.
The other two keywords are needed to get the type names via BulkType events (see http://labs.criteo.com/2018/09/monitor-finalizers-contention-and-threads-in-your-application/ for more details).
Unfortunately, the current EventListener implementation does not marshal the type names but we need the keyword to receive the events.
Thanks: I will try to keep on publishing this kind of articles
Your point is valid about relying on “implementation details” but at some point, as the whole post is about, when performance becomes an issue, the solution must be heavily tested and, unfortunately, might not be perfect (in our case, cashing was no possible and the .NET Core implementation is totally different).