Utilizando una declaración alrededor del formulario de diálogo para garantizar la recolección de basura

Tenemos una aplicación de formularios Windows Forms que contiene miles de formularios.

Muchos de estos se muestran temporalmente como cuadros de diálogo a través del método ShowDialog ().

Esta aplicación ha existido durante años y hemos descubierto que muchos de los formularios no están recolectando basura de manera oportuna debido a varias fugas de recursos en el formulario o los controles que utiliza.

specíficamente, hemos encontrado ejemplos de recursos GDI + que no se están eliminando adecuadamente, aunque puede haber otros tipos de pérdidas de recursos que aún no se han caracterizado.

Aunque la forma correcta de resolver esto es obviamente pasar por cada formulario y cada control y eliminar todos los problemas de recursos. Esto llevará algún tiempo lograrlo.

omo alternativa a corto plazo, hemos encontrado que llamar explícitamente a Dispose () en el formulario parece iniciar el proceso de recolección de basura y el formulario y sus recursos se desasignan de inmediato.

Mi pregunta es si sería una solución razonable para envolver el bloque ShowDialog () de cada formulario en una declaración de uso para que se llame a Dispose () después de que se haya mostrado el formulario, y ¿sería una buena práctica instituir en general? @

Por ejemplo, cambie el código existente de esto:

public void ShowMyForm()
{
    MyForm myForm = new MyForm();
    myForm.ShowDialog();
}

A esto

public void ShowMyForm()
{
    using (MyForm myForm = new MyForm())
    {
        myForm.ShowDialog();
    }
}

En nuestras pruebas, el método Dispose () de MyForm nunca se llama para el primer ejemplo, pero se llama inmediatamente para el segundo ejemplo.

¿Parece esto un enfoque razonable como una solución temporal a corto plazo mientras pasamos el tiempo rastreando cada uno de los problemas de recursos específicos?

¿Existen otros enfoques que podríamos considerar para una solución temporal y / o metodologías a corto plazo para identificar y resolver este tipo de problemas de recursos?

Respuestas a la pregunta(6)

Su respuesta a la pregunta