sando a declaração em torno do formulário de diálogo para garantir a coleta de li

Temos um aplicativo Windows Forms que contém milhares de formulário

Muitos destes são exibidos temporariamente como caixas de diálogo através do método ShowDialog (

Esta aplicação existe há anos e descobrimos que muitos dos formulários não estão sendo coletados em tempo hábil devido a vários vazamentos de recursos no formulário ou aos controles que ele us

Especificamente, encontramos exemplos de recursos GDI + que não estão sendo descartados adequadamente, embora possa haver outros tipos de vazamentos de recursos que ainda não foram caracterizado

Embora a maneira correta de resolver isso seja obviamente passar por todas as formas e todos os controles e eliminar todos os problemas de recursos. Isso levará algum tempo para ser realizad

omo alternativa de curto prazo, descobrimos que chamar Dispose () explicitamente no formulário parece iniciar o processo de coleta de lixo, e o formulário e seus recursos são desalocados imediatament

Minha pergunta é se seria uma solução razoável para agrupar o bloco ShowDialog () de cada formulário em uma instrução using, para que Dispose () seja chamado depois que o formulário for exibido, e isso também seria uma boa prática para instituir em geral?

Por exemplo, altere o código existente a partir disso:

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

Para isso

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

Em nossos testes, o método Dispose () do MyForm nunca é chamado para o primeiro exemplo, mas é chamado imediatamente para o segundo exempl

Parece uma abordagem razoável como solução alternativa de curto prazo enquanto passamos o tempo rastreando cada um dos problemas específicos de recursos?

xistem outras abordagens que poderíamos considerar para uma solução alternativa de curto prazo e / ou metodologias para identificar e resolver esses tipos de problemas de recurso

questionAnswers(3)

yourAnswerToTheQuestion