Использование оператора вокруг диалоговой формы для обеспечения сборки мусора

У нас есть приложение Windows Forms, которое содержит тысячи форм.

Многие из них временно отображаются в виде диалогов с помощью метода ShowDialog ().

Это приложение существует уже много лет, и мы обнаружили, что многие формы не собирают своевременно сборщик мусора из-за различных утечек ресурсов в форме или элементах управления, которые оно использует.

В частности, мы нашли примеры ресурсов GDI +, которые не удаляются должным образом, хотя могут быть и другие типы утечек ресурсов, которые еще не были охарактеризованы.

Хотя правильный способ решить эту проблему, очевидно, состоит в том, чтобы пройти через каждую форму и каждый контроль и устранить все проблемы с ресурсами. Это займет некоторое время.

В качестве краткосрочной альтернативы мы обнаружили, что явный вызов Dispose () в форме, кажется, инициирует процесс сборки мусора, и форма и ее ресурсы немедленно освобождаются.

Мой вопрос заключается в том, будет ли разумным обходным путем обернуть каждый блок ShowDialog () формы в операторе using так, чтобы Dispose () вызывался после того, как форма была отображена, а также будет ли это хорошей практикой для введения в общий?

Например, измените существующий код с этого:

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

На этот:

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

В нашем тестировании метод MyForm Dispose () никогда не вызывается для первого примера, но он вызывается немедленно для второго примера. .

Кажется ли это разумным подходом в качестве краткосрочного обходного пути, пока мы тратим время на отслеживание каждой из конкретных проблем с ресурсами?

Есть ли другие подходы, которые мы могли бы рассмотреть для краткосрочного обходного пути и / или методологии для выявление и решение таких проблем с ресурсами?

8
задан Avalanchis 29 November 2011 в 17:32
поделиться