Prawie każdy profiler pamięci pokaże te informacje. Po prostu znajdź listę "Martwych obiektów" pomiędzy dwiema migawkami i to jest lista "śmieci", która została wygenerowana i będzie musiała zostać zebrana przez GC.
Osobiście używam DotMemory przez JetBrains.
Na przykład z następującym programem
using System;
namespace SandboxConsole
{
class Program
{
private int _test;
static void Main(string[] args)
{
var rnd = new Random();
while (true)
{
var obj = new Program();
obj._test = rnd.Next();
Console.WriteLine(obj);
}
}
public override string ToString()
{
return _test.ToString();
}
}
}
Dało mi wyjście jak
Więc widać między dwoma migawek (czyli gdzie około 5 sekund od siebie) 218,242 ciągi, char [ ] s, a obiekty programu są gromadzone przez moduł do zbierania śmieci. i klikając łańcuchy, widzimy stosy wywołań, w których obiekty zostały utworzone. (zwróć uwagę, że musisz włączyć opcję "zbieraj dane przydziału", aby zobaczyć te stosy wywołań, bez uzyskiwania całkowitych liczb, ale nie w miejscu, z którego pochodzą)
Państwo określili go [vs2015]. Rozważ [używając go] (https://blogs.msdn.microsoft.com/visualstudioalm/2014/04/02/diagnosing-memory-issues-with-the-new-memory-usage-tool-in-visual-studio/), powinno to zostać szybko przeanalizowane poprzez porównanie migawek. –