Die Frage ist nur für Forschungszwecke.Wird Garbage Collection unmittelbar nach GC.Collect() ausgeführt?
Ich habe viele Bücher über C# gelesen und diese Frage kommt mir immer in den Sinn. Was ich verstanden habe, dass C# verwalteter Code ist und alle Garbage Collection stattfindet, wenn CLR entscheidet, wann Garbage Collection ausgeführt wird. Lasst uns beginnen.
Lasst uns vorstellen, dass ich einfach Klasse Student
:
public class Student
{
public int IdStudent { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
}
class Program
{
static void Main(string[] args)
{
This is row1: Person person = new Person() {IdPerson=1, Name="Bill", SurName="Collins"};
This is row2: System.GC.Collect();
This is row3: string str="Hello World!";
}
}
Bitte, genehmigen oder meine Vermutungen ablehnen:
- Bin ich richtig, dass die Garbage Collection nicht sofort ausgeführt wird bei row2?
GC.Collect()
ist nur eine Anfrage um eine Garbage Collection zu machen, die nicht sofort in row2 ausgeführt wird. Diese Zeile wird möglicherweise in x Millisekunden/Sekunden ausgeführt. Meiner Meinung nach MethodeSystem.GC.Collect();
sagt nur Garbage Collector, der Garbage Collector Garbage Collection laufen soll, aber echte Garbage Collection in x Millisekunden/SekundeNur Garbage Collector weiß, wann die Garbage Collection ausgeführt wird auftreten können. Und wenn es freier Platz in Generation 0 ist, dann Garbage Collection wird nicht auftreten, in dem row2:
row2: System.GC.Collect();
Es ist nicht möglich, die Garbage Collection läuft sofort, wie wir in verwalteten Umgebung programmieren und nur CLR entscheidet, wann Garbage Collection ausführen. Garbage Collection kann in x Millisekunden/Sekunden ausgeführt werden, oder Garbage Collection möglicherweise nicht ausführen, da in Generation 0 genügend Platz vorhanden ist, um neue Objekte nach Aufruf der Methode
GC.Collect()
zu erstellen. Was der Programmierer tun kann, ist CLR, um die Garbage Collection nach der MethodeGC.Collect()
zu starten.
Update:
ich this msdn article about GC.Collect Method()
. gelesen habe. Es ist mir jedoch unklar, wann ein echtes Clearing von nicht referenzierten Objekten gestartet wird. MSDN sagt:
GC.Collect-Methode() erzwingt eine sofortige Garbage Collection aller -Generationen.
Verwenden Sie diese Methode, um zu versuchen den gesamten Speicher zurückzufordern, die nicht zugänglich ist:
jedoch in Bemerkungen Ich habe diese ein zu lesen. Es führt eine blockierende Garbage Collection aller Generationen durch.
- ich damit bin verwirrt „Mit dieser Methode können TRY“ und ich denke, dass die Garbage Collection nicht Ursache CLR entscheidet auftreten kann, dass genügend Platz vorhanden ist um neue Objekte zu erstellen. Habe ich recht?
Oh es läuft definitiv, aber fragen Sie, ob es etwas bestimmtes sammelt? – Sayse
@Sayse Ja, sammelt GC unreferenzierte Objekte? – StepUp
Die [GC.Collect] (https://msdn.microsoft.com/en-us/library/xe0c2357 (v = vs.110) .aspx) Dokumentation enthält einige der Antworten .. – user2864740