内のノードの検索を最適化しようとしていましたTreeNodeCollection
。元の方法は再帰的アプローチを使用します。
public UGTreeNode FindNode(BaseId nodeId, TreeNodeCollection nodes)
{
foreach (UGTreeNode n in nodes)
{
if (n.node_info.Description.base_id.Id == nodeId.Id &&
n.node_info.Description.base_id.RootId == nodeId.RootId &&
n.node_info.Description.base_id.SubId == nodeId.SubId)
return n;
UGTreeNode n1 = FindNode(nodeId, n.Nodes);
if (n1 != null)
return n1;
}
return null;
}
すべてのノードを a に格納して、ノードの検索にDictionary
使用しようとしました。Dictionary.TryGetValue
public UGTreeNode FindNode(BaseId nodeId, TreeNodeCollection nodes)
{
UGTreeNode res;
_nodesCache.TryGetValue(nodeId.Id, out res);
return res;
}
しかし、2 番目のアプローチは最初のアプローチよりもかなり遅いことが判明しました (約 10 倍遅い)。これにはどのような理由が考えられますか?