何千ものフォームを含む Windows フォーム アプリケーションがあります。
これらの多くは、ShowDialog() メソッドを介してダイアログとして一時的に表示されます。
このアプリケーションは何年も前から存在しており、フォームまたはそれが使用するコントロールでのさまざまなリソース リークが原因で、多くのフォームでガベージ コレクションがタイムリーに行われていないことがわかりました。
具体的には、適切に破棄されていない GDI+ リソースの例が見つかりましたが、まだ特徴付けられていない他の種類のリソース リークがある可能性があります。
これを解決する正しい方法は、明らかに、すべてのフォームとすべてのコントロールを調べて、すべてのリソースの問題を排除することです。これには時間がかかります。
短期的な代替手段として、フォームで明示的に Dispose() を呼び出すとガベージ コレクション プロセスが開始され、フォームとそのリソースの割り当てがすぐに解除されることがわかりました。
私の質問は、フォームが表示された後に Dispose() が呼び出されるように、各フォームの ShowDialog() ブロックを using ステートメントでラップすることが合理的な回避策であるかどうかです。
たとえば、既存のコードを次のように変更します。
public void ShowMyForm()
{
MyForm myForm = new MyForm();
myForm.ShowDialog();
}
これに:
public void ShowMyForm()
{
using (MyForm myForm = new MyForm())
{
myForm.ShowDialog();
}
}
私たちのテストでは、最初の例では MyForm の Dispose() メソッドが呼び出されることはありませんが、2 番目の例ではすぐに呼び出されます。
これは、特定のリソースの問題をそれぞれ追跡するのに時間を費やしている間、短期的な回避策として合理的なアプローチのように思えますか?
これらのタイプのリソースの問題を特定して解決するための短期的な回避策や方法論として検討できる他のアプローチはありますか?