□投稿者/ kiku (98回)-(2019/07/02(Tue) 17:06:54)
|
分類:[C#]
下記環境にて下記ソース(全体の抜粋)で、フォームのnewとdisposeを繰り返すと、
メモリ使用量がどんどん増加し、OS全体が不安定になる現象が発生しています。
下記ソースの★の部分を追加すると、メモリ使用量の増加が抑えられ、
OSが不安定になることはなくなりました。
※通常はGCで回収されると思っているのですが、
その発生を確認することができなかった。
※通常はControls.Addしているのでフォーム解放時にdisposeされる認識
そこで質問です。
質問1
本当にフォントやラベルが解放されないことを確認する方法はないでしょうか?
質問2
解放されないことが確認できたとして、
★の部分の対処は適切でしょうか?
●環境
.NETCompactFramework3.5
WindowsCE6.0
C#
VS2008
●ソース
partial class Test
{
/// <summary>
/// 必要なデザイナ変数です。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 使用中のリソースをすべてクリーンアップします。
/// </summary>
/// <param name="disposing">マネージ リソースが破棄される場合 true、破棄されない場合は false です。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
this.lbl_serialnumber.Font.Dispose();//★対策追加
this.lbl_serialnumber.Dispose();//★対策追加
}
base.Dispose(disposing);
}
#region Windows フォーム デザイナで生成されたコード
/// <summary>
/// デザイナ サポートに必要なメソッドです。このメソッドの内容を
/// コード エディタで変更しないでください。
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();//★対策追加
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);
}
#endregion
private System.Windows.Forms.Label lbl_serialnumber;
}
|
|