Interviewer fragte mich heute darüber ... gibt es eine Antwort?Wie erzwinge ich den Garbage Collector?
Antwort
System.GC.Collect()
Kräfte Garbage Collector zu laufen. Dies wird nicht empfohlen, kann aber verwendet werden, wenn Situationen auftreten.
+1 für "wenn Situationen auftreten". –
Warum wird es nicht empfohlen? –
GC.Collect()
von MDSN,
Verwenden Sie diese Methode, um zu versuchen alle Speicher zurückzufordern, die nicht zugänglich ist.
Alle Objekte, unabhängig davon, wie lange sie im Speicher waren, werden für die Sammlung berücksichtigt; Objekte, die in verwaltetem -Code referenziert werden, werden jedoch nicht erfasst. Verwenden Sie diese Methode, um das System zu versuchen, die maximale Menge von verfügbaren Arbeitsspeicher zu erzwingen.
Beachten Sie aber, dass der Garbage Collector nicht immer aufzuräumen, was Sie erwarten ...
Was meinst du damit? Was könnte es unerwartet sauber? – Voldemort
@Voldemort - Es würde nicht unerwartet etwas reinigen. Aber es kann nicht alles aufräumen, was Sie erwarten. –
Es ist nicht explizit zu nennen gc empfohlen wird, aber wenn Sie
nennenGC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
Es ruft GC explizit in Ihrem Code, vergessen Sie nicht, GC.WaitForPendingFinalizers();
nach GC.Collect()
zu rufen.
'WaitForPendingFinalizers' gibt nicht unbedingt" bessere Leistung ": Es blockiert einfach, bis alle Objekte in der Finalisierungswarteschlange abgeschlossen sind (Objekte, die möglicherweise durch Ihren vorherigen Aufruf von' Collect' dorthin gelegt wurden). Wenn Sie eine Chance für Diese Objekte gesammelt werden, dann brauchen Sie * einen anderen Aufruf an 'Collect' * nach dem Aufruf von' WaitForPendingFinalizers'. – LukeH
Da einer der wenigen guten Gründe, gc.Collect aufzurufen, ist ein letzter Versuch, Ressourcen zu befreien, die waren Wenn Sie nicht richtig sortiert haben, scheint WaitForPendingFinalizers ein notwendiger Schritt zu sein. Ich bin mir nicht sicher, was die beste Vorgehensweise wäre, um gc.Collect in solchen Fällen übermäßig zu nennen. BTW, ich frage mich Gibt es irgendeinen technischen Grund, warum gc.Collect "Generationen" zu fördern hat? Es scheint sinnvoller zu sein, dass Generationen bleiben, wenn nicht genug Zeug in einem gegeben ist, um den Fortschritt zu rechtfertigen. – supercat
_Hinweis für Anfänger in C# _ (wie ich): GC force call garantiert nicht, einige konkrete unbenutzte Objekte aus dem Speicher entfernt werden. (Eine Möglichkeit, dies zu tun, ist die Verwendung von "using-Anweisung" (https://msdn.microsoft.com/ru-ru/library/yh598w02(v=vs.80).aspx)) – user1234567
Sie möchten den Garbage Collector nicht zum Ausführen zwingen.
Wenn Sie jedoch jemals getan hat (als rein akademische Übung, natürlich):
GC.Collect()
Ich bevorzuge @ Karthiks Antwort, dort kann Situationen sein, in denen eine App GC.Collect() rechtmäßig aufrufen sollte. Sehr selten aber. –
Angenommen, Sie hatten eine Reihe von schwachen Referenzen und wollten überprüfen, ob irgendwelche 'Live'-Referenzen vorhanden waren. Es wäre sinnvoll, vor der Überprüfung GC.Collect() aufzurufen. Sag es einfach. –
Ich denke, dass. NET Framework tut dies automatisch, aber nur für den Fall. Stellen Sie zunächst sicher zu wählen, was Sie löschen möchten, und dann den Garbage Collector nennen:
randomClass object1 = new randomClass
...
...
// Give a null value to the code you want to delete
object1 = null;
// Then call the garbage collector to erase what you gave the null value
GC.Collect();
Ich denke, das ist es .. Hoffe, dass ich jemand helfen.
GC.Collect();
wir rufen Garbage Collector von sammeln Methode von Garbage Collector. Meistens gibt es keine Notwendigkeit, Garbage Collector aufzurufen, da es kontinuierlich im Hintergrundprozess durch separaten Thread läuft
- 1. JRuby - Wie starte ich den Garbage Collector?
- 2. Warum den Garbage Collector deaktivieren?
- 3. Xcode: Garbage Collector Einstellung
- 4. LogManager und Garbage Collector
- 5. Kopieren von Garbage Collector
- 6. Wie stoppe ich den Android Garbage Collector? Ist es möglich?
- 7. Garbage Collector asp.net
- 8. V8-Garbage-Collector-Fehler
- 9. Können wir den Garbage Collector explizit aufrufen?
- 10. v8 | den Garbage Collector manuell initiieren
- 11. Beeinflusst Readonly Modifier den Garbage Collector?
- 12. Eclipse: Garbage Collector Button
- 13. Garbage Collector Auswirkungen auf Solr
- 14. aktuellen Mono Standard Garbage Collector
- 15. Ruft Garbage Collector Dispose() auf?
- 16. Wie erkennt Pythons Garbage Collector kreisförmige Referenzen?
- 17. Java Collections und Garbage Collector
- 18. Wie hakt man .NET Speichermanager/Garbage Collector?
- 19. Wie kann ich sehen, welche Garbage Collector Java verwendet
- 20. Relative Leistung von Java Garbage First (G1) Garbage Collector?
- 21. Cocoa-Netzwerk-Streams und der Garbage Collector
- 22. Entladen von Objekten für den Garbage Collector in AS3
- 23. JAVA Multi-Threading, Speicherleck, Garbage Collector
- 24. Gibt JavaScript Garbage Collector globale Variablen an?
- 25. UIWebView Lecks, JS Garbage Collector & WebCore VMs
- 26. Garbage Collector kann Speicherressourcen nicht wiederherstellen
- 27. Garbage Collector und doppelt belegten Speicher
- 28. NodeJS Abnahme v8 Garbage Collector Speichernutzung
- 29. Xamarin Garbage Collector und zirkuläre Referenzen
- 30. Garbage Collector Arbeit mit 2 WeakHashMaps
Diese Frage hat gute Informationen darüber, warum Sie das nicht tun sollten: http://stackoverflow.com/questions/118633/ whats-so-falsch-about-using-gc-collect –
warum erzählst du so –
Der Wie Teil ist weit weniger wichtig als das Warum (nicht) es Frage zu nennen. –