1

ListView を使用して大量のデータをユーザー インターフェイスに出力するプログラムがあります。500MB を超えるデータを保持するためにいっぱいになることもありますが、これは私の問題ではありません。私の問題は、アプリケーションのメモリ消費量を介してリストビュー内のアイテムをクリアしようとすると、 listview.Items.Clear();わずかに減少し、そこに座っていることです。リストビューのみを含む新しい Windows フォーム アプリケーションのメモリの例:

  • 7,812K - リストビュー項目を追加せずにプログラムを実行。
  • 26,816K - 値「test」に割り当てられた 50000 個の ListView アイテムが取り込まれます
  • 22,860K - 以前の 50000 個の ListView アイテムをクリアした後のメモリ。

メモリ値は、タスク マネージャーからのものです。

私の問題は、私が知る限り、 listview.Items.Clear() がリストビュー項目によって消費されたすべてのメモリを解放していないことです。

関連情報: 私のテスト プログラムでは、'details' ビュー プロパティと 1 つの列を持つ ListView だけが含まれています。

関連コード:

public void Test()
{
    for (int i = 0; i < 50000; i++)
    {
        listView1.Items.Add(new ListViewItem("test"));
    }
}
private void listView1_Click(object sender, EventArgs e)
{
    listView1.Items.Clear();
}
4

1 に答える 1

0

リストビューをクリアしてもアイテムは破棄されません。これが、メモリが同じままである理由です。

ただし、アイテムがプロジェクト内のどこにも参照されていない場合、ガベージコレクターが起動すると、アイテムは適切に破棄され、メモリが再びダウンします。

于 2012-09-02T01:48:47.320 に答える