Ein Beispiel für erzwungenes GC ist fehlgeschlagen?

8

Ich mache eine Intro-Präsentation auf dem .Net CLR GC und habe all die verschiedenen Stücke, aber ich wollte ein Beispiel speziell dafür, wie der Versuch, die Sammlung zu erzwingen, gefährlich oder schädlich sein könnte. Ich weiß, dass du Dinge vorzeitig in höhere Generationen zwingen kannst, aber (was ich sagen könnte) würde das wirklich nur die Dinge verlangsamen.

Ich versuche, an eine Situation zu denken, in der das Erzwingen von GC wirklich schädlich sein könnte und ich immer mit weniger effizienten Lösungen auftrete.

    
Rikon 23.07.2012, 19:52
quelle

2 Antworten

4

Hier ist eine interessante Demonstration. Beachten Sie, dass Sie diese im Freigabemodus kompilierte Demo ausführen sollten oder dass sie möglicherweise nicht wie angekündigt funktioniert.

Version 1:

%Vor%

In Version 1 werden das Datum und die Uhrzeit problemlos einmal pro Sekunde in das Textfeld gedruckt.

Version 2:

%Vor%

Jetzt werden Datum und Uhrzeit in Version 2 nur einmal gedruckt, da nach der Deklaration keine Referenzen mehr auf das Timer-Objekt vorhanden sind und das Timer-Objekt gesammelt wird.

Das ist ein ziemlich künstliches Beispiel, aber vielleicht eine gute Demonstration.

Ich muss Jeffrey Richter dafür danken - es ist in seinem ausgezeichneten Buch CLR via C# .

    
James 23.07.2012, 20:28
quelle
1

Was ist mit der folgenden, schlechten Idee? "Lassen Sie uns nach jeder HTTP-Anfrage in ASP.NET einen GC erzwingen, um den Anforderungsstatus zu bereinigen, der sicher verwaist sein wird!"

Das ist eine schlechte Idee, weil die gleichzeitige HTTP-Anfrage sich gegenseitig stören würde. Dies würde viele Latenzspitzen verursachen und die Leistung zerstören. All das beginnt mit einer unschuldigen "Optimierung".

Das ist das Schlimmste, an das ich denken kann.

    
usr 23.07.2012 19:59
quelle

Tags und Links