2012-08-17 10 views
1

나는 더 많은 메서드가있는 경우 C# 클래스가 더 많은 공간을 차지합니까?

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의 목록을 메모리에 객체를 캐시 할 TreeNode를

라는 클래스가 있습니다.

클래스 내부에서 FindChildrenNode 메서드를 유지하면 캐시 할 때 메모리에 더 많은 공간이 필요합니까?

TreeNodeUtilities 클래스에서 검색 기능을 이동해야합니까?

답변

7

필드는 클래스의 인스턴스 당 메모리를 소비합니다. 방법은 그렇지 않습니다. 속성은 인스턴스 단위 메모리를 소비하지 않지만 해당하는 필드는 사용합니다.

메서드는 코드와 메타 데이터에 대해 약간의 메모리를 사용하지만 크기가 작고 만든 개체 수에 따라 확장되지 않으므로 대부분의 경우 무시 될 수 있습니다.

즉, 검색 기능을 별도의 클래스로 옮겨서는 아무 것도 얻을 수 없습니다.

메모리가 절실히 필요하다면 하위 목록을 저장하는 방식을 변경하거나 (예 : 첫 번째 자식, 다음 형제 시스템 사용) 배열로 삽입 된 구조체로 바꾸는 것조차도 . 하지만 분명히 중요한 성능 문제가 아니라면, 나는 어느 쪽도하지 않을 것입니다.

1

FindChildrenNodeById을 수업에 포함시켜야 할뿐만 아니라 반드시해야합니다. FindChildrenNodeById이 TreeNode와 모든 자식 노드를 검색한다고 가정합니다. 검색을위한 시작점이 필요하므로 함수에 대한 입력은 node_Id 및 시작 노드가됩니다. 귀하의 경우, 출발점은 this입니다.

유틸리티를위한 다른 클래스가 필요 없습니다. 지금까지 올바른 방법으로하고 있습니다.

관련 문제