【发布时间】:2016-08-10 08:39:05
【问题描述】:
只是对我的自定义 TreeView 控件进行了一些最终优化,看起来我可以进一步优化加载方法。这是我关注的部分,我认为可以通过首先构建所有 TreeNode,然后使用单个 TreeView.AddRange( nodes[] ) 方法来优化。
// Create hierarchy and load into view
foreach (var id in _treeNodes.Keys)
{
var node = GetNode(id);
var obj = (T)node.Tag;
var parentId = getParentId(obj);
if (parentId.HasValue)
{
var parentNode = GetNode(parentId.Value);
if(parentNode == null)
{
Invoke((MethodInvoker)(() => Nodes.Add(node)));
} else
{
Invoke((MethodInvoker)(() => parentNode.Nodes.Add(node)));
}
}
else
{
Invoke((MethodInvoker)(() => Nodes.Add(node)));
}
}
_treeNodes 是Dictionary<ulong, TreeNode>
GetNode() 是:
if(_treeNodes.ContainsKey(id))
{
return _treeNodes[id];
} else
{
return null;
}
getParentId() 是代表Func<NtfsUsnJournal.UsnEntry, ulong?> getParentId = (x => x.ParentFileReferenceNumber)
代码当前从一个字典列表中获取所有值,该字典列表是 NTFS 日志中的所有目录,这发生得非常快。延迟是在每个 Node 和子节点上,它被直接添加到 TreeView。
我想做的是构建一个根节点列表(当然包含所有子节点),然后将其作为TreeNode[] 的数组传递给单个Invoke() 中的.AddRange( TreeNode[] ) 方法。
如何修改这段代码来完成这个?
【问题讨论】: