目前我的结构如下:
名称,类型,RefName,RefType
目标是用户选择元素和方向,然后在网页(JSON数据)中获取树结构,显示符合其条件的所有元素。你可以想象,上升并不难。树结构变得更窄,因此性能没有问题。虽然越来越多的节点被添加,但在某个时刻它会变慢。此时节点被添加到HashSet中,我递归地通过它们。我的程序结构是:
private void BuildChildNodes(ElementRefItem element, int goalDepth, int currentDepth =0)
{
if (goalDepth <= currentDepth)
{
return;
}
currentDepth++;
var elements = refElementRepository.All().Where(x => x.ElementName == element.Name);
foreach (var refElement in elements)
{
var node = CreateNode(refElement.ElementRefName, refElement.ElementRefType);
BuildChildNodes(node, goalDepth, currentDepth);
element.ChildNodes.Add(node);
}
}
我正在寻找优化这部分代码的技巧。还有其他方法可以更快地完成这项工作吗?
(实际数据结构有点复杂,但为了清楚起见,显示此版本更容易)
答案 0 :(得分:0)
每次我检索一次数据(所有数据每天都刷新一次)而不是每次都执行一次查询时,我会构建两个HashSet;一个用于亲子关系,一个用于父母与子女的关系。这使得可以在HashTable中找到一个元素(女巫非常快),从而检索整个树部分。在元代码中,它看起来像这样:
- Create new cache (bottom up, top down)
- Foreach CachedObject
- Check if items exist (both parent and child)
: yes -> select node
: no -> create node and insert it in the new cache
- add child to parent node
这给出了Parent对象的hashset。现在,您可以选择一个父对象,并自动获得整个树部分。