Frage

Viele Male gibt es eine klare Methode, die alle Elemente aus den Sammlungen entfernt, werden diese Elemente auch angeordnet ist.

Wie,

toolStripMenuItem.DropDownItems.Clear();

ist ausreichend, oder sollte ich anrufen muss wie folgt aus:

foreach (ToolStripItem item in toolStripMenuItem.DropDownItems)
{
  toolStripMenuItem.DropDownItems.Remove(item);
  item.Dispose();
}

Edit: Nun ToolStripItem ist ein Beispiel keine Frage, für diejenigen, die sagen klar genug Ich ist ein weiteres Beispiel gefunden, TabControl hat auch Artikel Sammlung und klare Verfahren. Aber TabControls komplexe Steuerungen haben kann (zumindest ich habe), die explizit entsorgen sein muss (auch wenn sie automatisch zu einem bestimmten Zeitpunkt durch GC Angeordnet sind, verursachen sie nehmen große Speicher). Ich denke, die beste Antwort divo Kommentar ist es, die Produkte zu verfügen, und dann klar nennen.

War es hilfreich?

Lösung

F: Does

A:. Nein - Clear nicht die Einzelteile verfügen (sie in anderen Teilen der Anwendung verwendet werden könnte)

Also, wenn Ihr ToolStripItems sind Standard .NET diejenigen sollten, Clear ausreichend sein? Nach einigem Nachdenken würde ich „wahrscheinlich nicht“ sagen.

Ja, das ist wahr, dass, wenn Sie alle Verweise in anderen Teil Ihrer Anwendung auf das ToolStripItem haben, die .NET GarbageCollector zerstören (verwenden Sie die Klasse destructor ) automatisch. Aber es nicht nennen die Dispose(true) Methode , das ist jedoch erforderlich für die IDisposable Komponenten des Formulars.

Read a propos diese und diese .

Eigentlich glaube ich, dass man so will, muß jedoch ausdrücklich Ihre Artikel Dispose, wie der Toolstrip des Entsorgen Methode nicht (ersetzen Sie diese von yourToolStrip ):

if (!this.Items.IsReadOnly)
{
    for (int i = this.Items.Count - 1; i >= 0; i--)
    {
        this.Items[i].Dispose();
    }
    this.Items.Clear();
}

EDIT

ich auch den folgenden Thread erstellt um diese Frage zu klären, allgemeiner.

Andere Tipps

Sie sollten auf Dispose() Anruf verlassen, wenn Sie mit dem nicht verwalteten Speicher, gemeinsam genutzte Ressourcen oder großen Speicherbereichen zu tun hat. Nicht scheint diesen Fall.

Clear Aufruf nicht die Elemente verfügen, aber es entfernt den Verweis aus der Sammlung auf die Elemente. Wenn das der einzige Hinweis auf die Elemente war sie Müll irgendwann automatisch gesammelt werden (die man nicht vorhersagen kann, aber Sie können steuern die GC-Klasse).

Ich glaube nicht, mehr, kann es viele logische Probleme verursachen, weil Sie Verweis auf dieses Objekt in der Sammlung für den späteren Gebrauch haben. Wenn Sie keine Referenzen müssen, dass Garbage-Objekte werden Collector entsorgen, dass Objekte später

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top