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クラス内に留まるべきであるだけでなく、そうしなければなりません。FindChildrenNodeByIdTreeNode とすべての子ノードを検索すると仮定します。検索の開始点が必要になるため、関数への入力は node_Id と開始ノードになります。あなたの場合、出発点はthis.

ユーティリティ用の別のクラスは必要ありません。あなたはこれまでのところ正しい方法でそれを行っています。

于 2012-08-17T11:30:19.137 に答える