Ich mache eine Analyse über die Zeit in einem kritischen Codeabschnitt.Wie kann man feststellen, ob zwischen zwei Checkpoints eine vollständige Garbage Collection ausgelöst wurde?
//Take a timestamp before
var before = DateTime.UtcNow;
DoCriticalMethod();
//Take a timestamp after
var after = DateTime.UtcNow;
Und irgendwann habe ich einige Werte deutlich höher als andere.
Ich vermute, dass es Garbage Collection ist, also möchte ich die hohen Werte mit der Tatsache korrelieren, dass eine Garbage Collection während des Prozesses aufgetreten ist.
tryed ich dies so weit: Ich nehme den Zähler vor:
//Take the number before
int gc2CountBefore = GC.CollectionCount(2);
...
//Take the number after
bool hasgc2occured = (GC.CollectionCount(2) - gc2CountBefore) != 0;
Bin ich es in der guten Art und Weise zu tun?
Sie sollten die 'System.Diagnostics.Stopwatch' Klasse verwenden, um die Ausführungszeit zu messen,' DateTime' hat nicht genug Auflösung. –
Vielen Dank Trevor, ich benutze tatsächlich eine präzise Bibliothek, die direkt die Systemuhr für die maximale Präzision und bessere Leistung aufrufen. Ich habe DateTime in mein Beispiel eingefügt, um einfach zu verstehen. – Thomas
Warum denken Sie, dass Ihre Herangehensweise falsch ist? Es scheint gut zu funktionieren – JaredPar