RichTextBox
RichText のリソース ファイルが読み込まれた を含む子フォームがあります。
子フォームを閉じるボタンをクリックすると ( を使用Close()
)、フォームが閉じて親フォームに戻ります。ただし、リソースは破棄されていません。実際、マウスのボタンをほぼ使い果たした後、記憶は本当にエスカレートしました。
リソースが最終的に解放されるかどうかを確認するためのテストとして、親にフォーム タイマーを設定して子フォームをロードし、別のフォーム タイマーを子フォームに呼び出してClose()
. 今回は、約 5 ~ 6 回の開閉サイクル後にリソースが解放されました。
うーん.. と思いました。そこで、現実をシミュレートするためにセットアップを変更しました。今回は、子フォームのタイマー起動イベントを、文を含むpressedイベントを起動するcontainbutton1.PerformClick()
に変更しました。今回はリソースが解放されず、テストを中止する前にメモリ使用量が 1 ギガバイトに達しました。button1
Close()
を含むボタン イベントが、を含むClose()
タイマー イベントと異なるのはなぜClose()
ですか?
OK..子フォームを開くための親フォームのコードは次のとおりです。
private void showSplashScreen()
{
// Instantiating SplashScreen
SplashScreen splash = new SplashScreen();
// Displaying SplashScreen
splash.ShowDialog();
}
フォームを閉じるための子フォームのコードは次のとおりです。
private void button1_Click( object sender, EventArgs e )
{
Close();
}
private void timer1_Tick( object sender, EventArgs e )
{
button1.PerformClick();
// Close();
}
この方法で実行すると、メモリ使用量がエスカレートします..しかし、button1.PerformClick()
コメントアウトされ、Close()
コメント解除されている場合、リソースは定期的に解放されます