1

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

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

内存值来自任务管理器。

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

相关信息:在我的测试程序中,它只包含一个具有“详细信息”视图属性的 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 回答