Я согласен, что профилировщик памяти - это самый простой способ получить информацию, которую вы ищете. В дополнение к двум ранее упомянутым, я рекомендую JetBrains dotTrace , который является одновременно и профилировщиком производительности, и профилировщиком памяти.
Если вы хотите сделать это самостоятельно и хотите получить достаточно глубокие знания о CLR, вы можете использовать .NET Profiling API , который является неуправляемым API (как говорит Microsoft ): "позволяет профилировщику контролировать выполнение программы с помощью общеязыковой среды выполнения (CLR)." Он не предназначен для повседневного использования, но обладает огромным количеством функций.