Listview清除和释放内存

时间:2012-09-02 01:40:25

标签: c# memory-management

我有一个程序使用ListView将大量数据打印到用户界面。它有时可以填充超过500MB的数据,但这不是我的问题。我的问题是,如果我尝试通过listview.Items.Clear();清除列表视图中的项目,我的应用程序的内存消耗只会下降一小部分,并且就在那里。来自全新Windows窗体的内存示例只包含一个列表视图:

  • 7,812K - 没有添加列表视图项目的程序运行。
  • 26,816K - 填充了分配给值“test”
  • 的50000个ListView项目
  • 22,860K - 清除之前的50000 ListView项目后的内存。

内存值来自任务管理器。

我的问题是listview.Items.Clear()并没有释放listview项目占用的所有内存,据我所知。

相关信息:在我的测试程序中,它包含的是一个带有'details'视图属性的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();
}

1 个答案:

答案 0 :(得分:0)

清除列表视图不会处理这些项目,这就是内存保持不变的原因。

但是,如果项目未在项目的任何位置引用,则当垃圾收集器启动时,它们将被正确处理并且内存将再次关闭。