garbage collector aufrufen
-
hi
gibt es eine möglichkeit den garbage collector per befehl aufzurufen ?
mfg LT
-
c++ hat einen GC`?!?!
-
WARUM willst Du das???
Es macht IMHO eigentlich keinen Sinn.... aber wenn Du es unbedingt willst:
System::GC::Collect(); System::GC::WaitForPendingFinalizers(); System::GC::Collect();
-
WaitForPendingFinalizers kann schnell inni Hose gehen
-
???
-
Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum FAQ - C++/CLI in das Forum C++/CLI mit .NET verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Jochen Kalmbach schrieb:
???
WaitForPendingFinalizers returned uU nie, wenn ein finalizer hängt.
Deshalb sollte man da immer einen 2. thread starten der nach einer bestimmten zeit den aktuellen thread wieder weckt.
-
Genau.
Weil man sich auch manchmal in Finalizern kurz irgendwelche (globalen) Locks holt, und man sich damit im Endeffekt schnell nen hübschen Deadlock basteln kann wenn man nicht aufpasst.
Bei Collect() alleine dagegen kann sowas eigentlich nicht passieren.
-
Naja... man sollte eigentlich *nie* den GC aufrufen...
Und Fehler sollte man auch beheben...Solche Argumente sind Sinnlos...
Wer wirklich die Notwendigkeit eines Finalizers sieht, sollte zuerst mal schauen ob er verstanden hat wie das Ding funktioniert...
Wenn dann wirklich noch einer benötigt wird, dann sollte er sich mal mit den CriticalFinalizers beschäftigen...
http://msdn.microsoft.com/en-us/magazine/cc163716.aspx#S8Aber wie gesagt: Einen Finalizer zu schreiben hört sich einfach an, ist es aber 100%ig nicht!
-
@Jochen Kalmbach:
Das Problem ist, dass man mit WaitForPendingFinalizers() nicht nur auf seine eigenen Finalizer wartet, sondern auf alle Finalizer die es in dem Programm gibt. (Natürlich nur die die gerade laufen, aber das kann eben alles mögliche sein, das meine ich damit)Effektiv bedeutet das: "warte darauf bis mir völlig unbekannter Code, der weiss-gott-was machen könnte, fertiggelaufen ist".
Wenn man WaitForPendingFinalizers() dann noch an einer Stelle verwendet, die von anderen Programmteilen aufgerufen werden kann, dann kommt noch dazu: "und tu das, während u.U. haufenweise Locks gehalten werden".
Worauf ich hinaus will: GC.Collect() ist zwar meist sinnlos, aber zumindest harmlos. Und GC.WaitForPendingFinalizers() ist alles andere als harmlos.