我有一个只包含值类型属性的节点类和一个引用类型:它是父节点。在执行树搜索时,这些节点会在很短的时间内创建并销毁数十万次。C#如何有效地汇集节点树的对象?
public class Node
{
public Node Parent { get; set; }
public int A { get; set; }
public int B { get; set; }
public int C { get; set; }
public int D { get; set; }
}
树检索看起来是这样的:
public static Node GetDepthFirstBest(this ITree tree, Node root)
{
Node bestNode = root;
float bestScore = tree.Evaluate(root);
var stack = new Stack<Node>();
stack.Push(root);
while(stack.Count > 0)
{
var current = stack.Pop();
float score = tree.Evaluate(current);
if (score > bestScore)
{
bestNode = current;
bestScore = score;
}
var children = tree.GetChildren(current);
foreach(var c in children) { stack.Push(c); }
}
return bestNode;
}
因为这是有一个非常古老的GC单声道运行时完成,我想尝试,集中节点的对象。然而,我不知道如何知道节点对象何时可以安全地返回到池中,因为其他正在使用的节点可能会将其引用为父节点。在搜索结束时,返回最佳节点,并通过回溯其祖先来形成节点列表。如果这很有用,我完全可以控制如何在树内创建节点。
我可以尝试和实施哪些选项?
欢迎SO!这非常广泛。考虑发布你的_“节点”_类来帮助我们来帮助你。 _ [我如何问一个好问题?](http://stackoverflow.com/help/how-to-ask)_ – MickyD