Clear enthält die Steuerelemente nicht, was zu einem Speicherleck führt. Von der Verknüpfung:
Aufrufen der Clear-Methode entfernt Steuerelemente nicht aus dem Speicher. Sie müssen die Dispose-Methode explizit aufrufen, um Speicherlecks zu vermeiden.
Da innerhalb einer Schleife Anordnen der Indizierung vermasselt, können Sie entweder die Steuer Sammlung in eine andere Liste kopieren und eine ForEach
Schleife auf sie durchführen oder eine rückwärts For
Schleife verwenden.
for (int i = myTableLayoutPanelControls.Count - 1; i >= 0; --i)
myTableLayoutPanelControls[i].Dispose();
Dispose
Aufruf wird die Bedienelemente aus dem Speicher entfernen (wenn die GC es nimmt). Dies wird auch den Aufruf der Dispose
Methode des untergeordneten Steuerelements behandeln.
Ein Haken ist, wenn Sie ein benutzerdefiniertes Steuerelement haben, das IDisposable
implementiert, oder Sie überschreiben die Dispose
Methode ohne Aufruf der base
Methode. In der Methode Dispose
Ihres Objekts müssen Sie sicherstellen, dass Sie sich von Ereignissen außerhalb Ihres Bereichs abgemeldet haben. Wenn Sie dies nicht tun, wird diese Referenz Ihr Objekt am Leben erhalten.
Wenn kein anderes Objekt einen Verweis auf sie enthält, werden die GC's angezeigt. – Magnus
Richtig, aber ich wundere mich, das Sub-Table- layoutpanel enthält eine Referenz auf seine Kinder und die Kinder eine Referenz auf seine Eltern. Wie kann ich sicher sein, dass der GC die ganze Zeit korrekt entfernt? – Xaser