より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

IDisposableを継承したクラスのインスタンスをDisposeしないとどうなるか?

IDisposableを継承したクラスのインスタンスはDisposeしろ

前職では、徹底されていたことです。

ただ、Disposeしなかったら、具体的に何が起きるのか?

復習も兼ねて、実際に起こして見ることにしました。

単純にFormを2つ宣言し、Mainのフォームから何度もFormを呼び出しまくるということをしてみます。

#region

using System;
using System.Windows.Forms;

#endregion

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < 1000; i++)
            {
                var f = new Form2();
                f.Show();
                f.Close();
            }
        }
    }
}

f:id:rimever:20210511201753p:plain

HandleとThreadは変化はないのですが、メモリがグングン増加していきます。

f:id:rimever:20210511202234p:plain

4700K -> 8788K とメモリが3000Kも増大しています。

今回は、単純な何もないフォームですが、コントロールが多かったり、フォーム内部で処理が入っていると消費メモリは増大するでしょう。

github.com