C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■91569 / )  Re[16]: メモリリークに関して
□投稿者/ kiku (116回)-(2019/07/08(Mon) 11:36:04)
No91546 (kiku さん) に返信
> ここまでの情報や実験結果を用いてどのように対処していくのか
> 方向性を出したいと思っています。
> 少し考えさせてください。

下記のような対応にて、様子を見ることになりました。
Font.Dispose()については、意味がないことを説明したのですが、
ご理解得ることはできなかったため、実装しています。
実装しても弊害が発生することはないと思いますので。
結果が出るまでに、時間がかかると思いますので
ここで解決済みとします。

    partial class Test
    {
        private System.ComponentModel.IContainer components = null;

        protected override void Dispose(bool disposing)
        {
            CustomDispose.Dispose(this.Controls);//★対策追加
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        private void InitializeComponent()
        {
            this.lbl_serialnumber = new System.Windows.Forms.Label();
            this.SuspendLayout();
            // 
            // lbl_serialnumber
            // 
            this.lbl_serialnumber.BackColor = System.Drawing.Color.White;
            this.lbl_serialnumber.Font = new System.Drawing.Font("MS ゴシック", 16F, System.Drawing.FontStyle.Bold);
            this.lbl_serialnumber.Location = new System.Drawing.Point(5, 115);
            this.lbl_serialnumber.Name = "lbl_serialnumber";
            this.lbl_serialnumber.Size = new System.Drawing.Size(310, 20);
            this.lbl_serialnumber.Text = "lbl_serialnumber";
            // 
            // Test
            // 
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
            this.ClientSize = new System.Drawing.Size(640, 480);
            this.ControlBox = false;
            this.Controls.Add(this.lbl_serialnumber);
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            this.MaximizeBox = false;
            this.MinimizeBox = false;
            this.Name = "Test";
            this.Text = "Test";
            this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
            this.ResumeLayout(false);
        }

        private System.Windows.Forms.Label lbl_serialnumber;
    }

    //★ここ以降対策追加
    public class CustomDispose
    {
        static public void Dispose(Control.ControlCollection Controls)
        {
            foreach (var c in Controls)
            {
                Logger.Info(c.GetType().ToString());
                switch (c.GetType().FullName)
                {
                    case "System.Windows.Forms.Label":
                        ((System.Windows.Forms.Label)c).Font.Dispose();
                        ((System.Windows.Forms.Label)c).Dispose();
                        break;
                    //ここにTextBoxなどの他のコントロールも多数存在する。
                    //ここにカスタムコントロールも多数存在する。
                    default:
                        //●解放漏れの可能性あり●
                        break;
                }
            }
        }
    }


返信 編集キー/


管理者用

- Child Tree -