Gibt es eine Möglichkeit, die Gesamtzahl der Finalizer zu erhalten, die mit runtime.SetFinalizer
registriert wurden und die noch nicht ausgeführt wurden?Finalizer-Statistik
Wir erwägen die Hinzufügung eines struct
mit einem registrierten Finalizer zu einigen unserer Produkte, um Speicher freizugeben, der unter Verwendung malloc
zugewiesen wurde, und das Objekt möglicherweise eine relativ hohe Zuordnungsrate haben kann. Es wäre schön, wenn wir die Anzahl der Finalizer überwachen könnten, um sicherzustellen, dass sie sich nicht häufen und Speicherfehler verursachen (wie sie es bei anderen Garbage Collectors tun).
(Ich bin mir bewusst, dass explizite Freigabe dieses Problem vermeiden würde, aber wir können den vorhandenen Code nicht ändern, die keine Close
Funktion oder so etwas nicht nennen.)
Ich glaube, ich muss dies in der Laufzeit selbst setzen würde, weil ich nicht alle beteiligten Quellen patchen können. Es ist jedoch möglich, Finalizer zu entfernen, so dass das Zählen nicht trivial wird. Ich hatte auf eine Möglichkeit gehofft, Zähler aus der Laufzeit selbst zu sammeln. –