Entsorgen Sie ein Wörterbuch in C # best practice

8

Ich habe ein ConcurrentDictionary in meiner Sitzungsklasse.
Key ist eine Schnittstelle, die eine Managerklasse darstellt.
Value ist eine Liste von DataContracts-Klassen, die für diesen Manager in dieser Sitzung verwendet werden.

Wenn ich die Sitzungsklasse entsorgen möchte, möchte ich dieses Wörterbuch löschen. Ich muss alle Werte und Schlüssel löschen, aber ich kann die Schlüssel nicht entsorgen - da sie nach dem Ablegen noch vorhanden sind ..

Reicht das? - Wird der GC die Arbeit übernehmen?

%Vor%

Oder ich muss mit einer foreach auf allen Schlüsseln iterieren und die Remove verwenden, um Werte zu löschen.

    
ilansch 24.06.2013, 08:56
quelle

2 Antworten

16
  

Wenn ich die Sitzungsklasse entsorgen möchte, möchte ich dieses Wörterbuch löschen.

Warum? Wenn die Sitzungsinstanz für die Garbage Collection geeignet wird und die Sitzung das einzige Objekt ist, das auf das Dictionary verweist, wird das Dictionary für die Garbage Collection geeignet.

  

Reicht das? - Wird der GC die Arbeit übernehmen?

Es ist fast sicher unnötig. Wenn etwas anderes einen Verweis auf das Wörterbuch enthält, hat das Festlegen der Variablen that auf null keine Auswirkung. Wenn nichts anderes einen Verweis auf das Wörterbuch enthält und die Sitzung für die Garbage Collection geeignet wird, müssen Sie dies überhaupt nicht tun.

Die einzige Zeit, die es wert ist, eine Variable aus Gründen der Garbage Collection auf null zu setzen, ist, wann diese Variable selbst weiterleben wird (zB ist es eine Instanzvariable in einem Objekt, die nicht ist) gesammelt, oder es ist eine statische Variable).

Beachten Sie, dass die Speicherbereinigung übrigens völlig unabhängig von der "Entsorgung" von Objekten ist. Dispose und IDisposable beziehen sich im Allgemeinen auf unmanaged Ressourcen, und in Ihrer Frage gibt es keinen Hinweis darauf, dass dieses Konzept hier relevant ist.

    
Jon Skeet 24.06.2013, 09:00
quelle
-1

Sie können GC.Collect(); direkt danach aufrufen, um sicherzustellen, dass Ihr GC ausgelöst wird.

    
Robert 24.06.2013 08:59
quelle

Tags und Links