【发布时间】:2012-02-28 16:44:33
【问题描述】:
在我们的项目中优化 UI 时,我注意到 ListView 中的提升非常奇怪,但不明白它来自哪里。
简单地将 5000 个元素添加到 listView(视图:列表) - 3815 毫秒:
for (int i = 0; i < 5000; i++)
listView1.Items.Add((Guid.NewGuid().ToString()));
使用 BeginUpdate() + EndUpdate() - 2317 毫秒:
listView1.BeginUpdate();
for (int i = 0; i < 5000; i++)
listView1.Items.Add((Guid.NewGuid().ToString()));
listView1.EndUpdate();
使用 Hide() + Show() - 163 毫秒(没有错误,快 10 倍以上):
listView1.Hide();
for (int i = 0; i < 5000; i++)
listView1.Items.Add((Guid.NewGuid().ToString()));
listView1.Show();
风格也变了。 现在我有 4 列,而不是 2 列。
为什么这种方式这么快? 此外,为什么从隐藏的 ListView (Visible: false) 开始,在填充后显示它没有相同的性能提升?
TreeView 是不同的。简单添加 5000 个节点 - 2130 毫秒:
for (int i = 0; i < 5000; i++)
treeView1.Nodes.Add((Guid.NewGuid().ToString()));
使用 Hide() + Show() - 1048 毫秒:
treeView1.Hide();
for (int i = 0; i < 5000; i++)
treeView1.Nodes.Add((Guid.NewGuid().ToString()));
treeView1.Show();
使用 BeginUpdate() + EndUpdate() - 291 毫秒:
treeView1.BeginUpdate();
for (int i = 0; i < 5000; i++)
treeView1.Nodes.Add((Guid.NewGuid().ToString()));
treeView1.EndUpdate();
【问题讨论】:
-
将您的项目添加到列表中,然后调用
AddRange(...)您也应该手动指定您的列,而不是信任控件来动态分配它们。
标签: .net winforms performance listview treeview