Winforms 如何优化树节点名称更改?

Winforms 如何优化树节点名称更改?,winforms,Winforms,我有一个TreeView,它可以容纳大约100000个TreeNode甚至更多,我已经优化了反序列化过程中加载或卸载它们的所有相关内容,但现在我遇到了一个无法克服的问题 值得一提的是,我决定不使用控件提供的LabelEdit默认事件,因为要使它按我所希望的方式工作非常困难,众所周知,这个特定事件存在很多问题,这促使许多开发人员实现他们自己的自定义TreeView 在我的例子中,我使用了一个带有重命名选项的ContextMenu,这会在TreeNode前面显示一个textbox,然后我只需将Tre

我有一个TreeView,它可以容纳大约100000个TreeNode甚至更多,我已经优化了反序列化过程中加载或卸载它们的所有相关内容,但现在我遇到了一个无法克服的问题

值得一提的是,我决定不使用控件提供的LabelEdit默认事件,因为要使它按我所希望的方式工作非常困难,众所周知,这个特定事件存在很多问题,这促使许多开发人员实现他们自己的自定义TreeView

在我的例子中,我使用了一个带有重命名选项的ContextMenu,这会在TreeNode前面显示一个textbox,然后我只需将TreeNode.Text属性更改为textbox keydown事件中用户输入的任何内容,一旦触发此事件,整个GUI将冻结几秒钟4-5,我没有在TreeNodeCollection上做任何深度搜索,我直接访问TreeNode并修改属性


那么,你有什么想法吗?我已经尝试过BeginUpdate/SuspendLayout/甚至是在这里找到的自定义解决方案,但似乎没有任何帮助。

首先想到的是,当节点上的文本发生更改时,它必须重新绘制整个树视图

在这种情况下,suspendlayout没有帮助,因为控件没有放置其内容

我认为当节点被添加到列表中时,beginupdate会停止绘图,但更改的文本可能会绕过此操作


您是否考虑过不使用按键,在用户关闭文本框后只更新文本?i、 完成编辑。不理想,但会将性能命中限制为一次,而不是每一次击键?

我不会触发编辑过程每一次击键都会有问题,只需按一次enter键即可,因此,是的,需要找到一种方法,不必重新绘制整个树和某个特定区域,不确定是否可能。