0

绑定时,我得到了一个包含太多元素的TreeView 。它非常快,因为我使用 beginUpdate 和 endUpdate,但是当我说

treeView.beginUpdate();

treeView.items.clear();

treeView.endUpdate();

它与我添加时的效率不同。当我清除所有项目时,需要很长时间并且不会暂停 UI。

4

2 回答 2

1

如果 Nodes 集合有 200 多个项目,则 Clear() 方法会自动调用 BeginUpdate() 和 EndUpdate() 方法,这就是您可能没有真正注意到任何差异的原因。

然而,这对您没有多大帮助,因为 Clear() 方法所做的是它遍历整个树并删除所有子节点,这当然需要很多时间。不幸的是,Nodes 属性是只读的,因此您不能只初始化 TreeViewNodeCollection。

重新创建 TreeView 控件 - 正如 Daro 所建议的那样 - 可能是一个可行的选择,因为它非常快,但是它似乎不会立即释放内存(调用 Dispose() 当然会再次遍历所有节点)。我通过强制垃圾收集对其进行了测试,它确实清理了它,这意味着它迟早被自动清理掉。

SuspendLayout();
    Controls.Remove(treeView1);
    treeView1 = new TreeView();
    treeView1.Location = new Point(39, 39);
    treeView1.Size = new Size(213, 210);
    Controls.Add(treeView1);
ResumeLayout();
于 2013-04-26T20:23:48.163 回答
0

Try collapsing the TreeView first (assuming not all nodes are at the top level):

treeView.beginUpdate();
treeView.items.CollapseAll();
treeView.items.clear();
treeView.items.endUpdate();
于 2013-04-26T16:08:27.097 回答