3

C# で .NET 2.0 を使用して単純な Windows フォーム プロジェクトを作成し、他のメイン UI アプリケーションで「メモリ リークが増加している」と思われる原因を正確にテストして確認することにしました。

この単純なプロジェクトで行ったことは、Form1 と Form2 の 2 つのフォームを作成することでした。

Form1 には、Form2 の新しいインスタンスをポップアップする 1 つの大きなボタンがあります。

private void button1_Click(object sender, EventArgs e)
{
    Form2 fm2 = new Form2();
    fm2.ShowDialog();
    fm2.Dispose();
}

Form2 は、ユーザーがウィンドウを閉じることを決定するまで、自分自身を表示する以外は何もしません。

アプリケーションを起動して Form1 のボタンを押すと、メモリ使用量が約 100 ~ kb 跳ね上がります。ポップアップを閉じて、もう一度ボタンを押すと、さらに 100 ~ kb の増分が表示されます。これを10~20回ほど繰り返します。最終的に、タスク マネージャーで 6,880 KB から 8,684 KB にジャンプすることがわかりました。現在、最終的には特定の数 (この場合は 8684 KB) で停止します。これに達すると、それ以上増加しなくなります。

これが私の問題です:

私のメインの UI アプリケーションは明らかにこれよりもはるかに複雑であり、どちらかといえば、このタイプのメモリの増加は、私が目にしているメモリ全体の増加の一部を占めている可能性が高いです。それにもかかわらず、それはまだ目立ちます。多くのフォームを含むプロジェクトでは、これはメモリ リークのように見えるため、タスク マネージャーで非常に悪く見えます。

まず第一に、これはメモリリークですか?

第二に、そうでなかったとしても、これを防ぐ方法はありますか?

4

2 に答える 2

3

物事が「どのように見えるか」についてあまり心配しないでください。.NET はメモリを非常に適切に管理します。メモリが収集されていない場合は、使用可能な空きメモリが十分にあることを意味します。メモリは使用するためにあるものであり、蓄えたり解放したりするものではありません。

これは問題ではなく、必要に応じて自動的に処理されます。

于 2013-05-08T02:39:43.403 に答える