gpt4 book ai didi

c# - 为什么字典查找比递归搜索慢?

转载 作者:太空宇宙 更新时间:2023-11-03 13:34:16 26 4
gpt4 key购买 nike

我试图优化对 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;
}

我尝试将所有节点存储在 Dictionary 中并使用 Dictionary.TryGetValue 搜索节点:

public UGTreeNode FindNode(BaseId nodeId, TreeNodeCollection nodes)
{
UGTreeNode res;
_nodesCache.TryGetValue(nodeId.Id, out res);
return res;
}

但事实证明,第二种方法比第一种方法慢得多(大约慢 10 倍)。可能的原因是什么?

最佳答案

当您始终搜索树中的第一项时,递归可能会更快。它还取决于 BaseIdEquals 实现或您在字典中使用的比较器。在递归方法中,您有引用比较。该字典使用 GetHashCodeEquals

您是如何衡量绩效的?

关于c# - 为什么字典查找比递归搜索慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19218503/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com