1

我有一个名为 TreeNode 的类

public class TreeNode
{
    public TreeNode Parent { get; set; }
    public Guid Id { get; set; }
    public List<TreeNode> ChildrenNodes { get; set; }

    public TreeNode FindChildrenNodeById(Guid node_Id);
    void RecursivelyFindNode();
}

我想将 TreeNode 对象列表缓存到内存中。

如果我将 FindChildrenNode 方法保留在类中,是否会在缓存时占用更多内存空间?

我应该在 TreeNodeUtilities 类中移动搜索功能吗?

4

2 回答 2

7

只有字段消耗类的每个实例的内存。方法不行。属性也不消耗每个实例的内存,但它们的支持字段会。

方法会为代码和元数据消耗一些内存,但它很小,并且不会随着您创建的对象数量而扩展,因此在大多数情况下可以忽略不计。

这意味着您不会通过将搜索功能移至单独的类来获得任何收益。

如果您迫切需要内存,更改子列表的存储方式(例如,使用第一个孩子、下一个兄弟系统)甚至将其转换为嵌入在数组中的结构将使您有所收获。但我也不会这样做,除非这显然是一个主要的性能问题。

于 2012-08-17T11:21:46.667 回答
1

您不仅应该留FindChildrenNodeById在课堂上,而且必须这样做。我假设这FindChildrenNodeById将搜索 TreeNode 和所有子节点。您需要一个搜索起点,因此该函数的输入将是 node_Id 和起始节点。在您的情况下,起点是this.

不需要另一个类的实用程序。到目前为止,你的做法是正确的。

于 2012-08-17T11:30:19.137 回答