Pregunta

Muchas veces hay un método claro, que elimina todos los elementos de las colecciones, son estos artículos dispuestos también.

Al igual que,

toolStripMenuItem.DropDownItems.Clear();

es suficiente, o debería tener que llamar así:

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

Edit: Bueno ToolStripItem no es un ejemplo de una pregunta, para los que dice es lo suficientemente claro que encontré otro ejemplo, también tiene TabControl recolección de objetos y método claro. Pero TabControls pueden tener controles complejos (al menos yo), que tiene que ser explícitamente a Dispose (incluso si están dispuestos de forma automática en algún momento por GC, causar toman gran memoria). Creo que la mejor respuesta es divo comentario para disponer los elementos y, a continuación, llamar clara.

¿Fue útil?

Solución

Q:? ¿Tiene

A:. No - Clear no disponer los elementos (que podrían utilizarse en otras partes de la aplicación)

Por lo tanto, si sus ToolStripItems son los .NET estándar, debería ser suficiente Clear? Después de reflexionar diría que "probablemente no".

Sí, esto es cierto que si va a tener ninguna referencia a la ToolStripItem en otra parte de su solicitud, el .NET garbagecollector destruirá (utilizar la clase destructor ) de forma automática. Pero, no llamar a la Dispose(true) Método , que es, sin embargo, que requieren los componentes IDisposable del formulario.

Leer a propósito este y este .

En realidad, creo que va, sin embargo, necesidad de explícitamente Dispose sus artículos, como de ToolStrip Desechar método no (reemplace este por yourToolStrip ):

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

editar

I también creó siguiente hilo para aclarar esta cuestión en términos más generales.

Otros consejos

Se debe confiar en la llamada Dispose() cuando se está tratando con memoria no administrada, recursos compartidos o áreas de memoria de gran tamaño. ¿No parece este caso.

Llamando Clear no disponer los elementos, pero elimina la referencia de la colección de los artículos. Si esa fue la única referencia a los artículos que serán automáticamente recogido de basura en algún momento (que no se puede predecir, pero es posible controlar el uso de la clase GC).

Yo no lo creo, más, puede causar muchos problemas lógicos ya que puede tener referencia a ese objeto en la colección para su uso posterior. Si usted no tiene referencias a que los objetos del colector de basura dispondrá que los objetos más tarde

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top