2011-01-16 3 views
4

저는 최근에 새로운 Tron 영화를 본 후 약간의 텍스트 기반 게임을하고 있습니다. (당신이 당신의 손에 많은 시간을 가진 괴짜 일 때처럼).그리드 만들기 - 효율적인 방법은 무엇입니까

개체를 배치 할 수있는 그리드를 만들었으며 현재 그리드를 만드는 데 오랜 시간이 걸리는 것으로 나타났습니다.

저는이 유형에 유용 할 모든 디자인 패턴, 아이디어, 개념 등을 어떻게 구현하는지 관심이 있습니다.

현재 그리드를 구성하는 4 개의 주요 '부품'이 있습니다.

우선 I는 '로우'

차례로 GridRow가 IEntity 어레이를 각각 포함 GridCell 년대의 배열을 보유
public interface IGrid 
{ 
    GridRow[] Rows { get; set; } 
} 

(모든 오브젝트의 배열을 포함하는 그리드 자체를 가질 수 있습니다 IEntity을 impliment해야합니다 그리드 셀에 배치 될 수있다.

public class GridRow 
{ 
    public int Index { get; set; } 
    public GridCell[] Cells { get; set; } 
} 

public class GridCell 
{ 
    public int Index { get; set; } 
    public IEntity[] Entities { get; set; } 
} 

을 그것이 꽤 오랜 시간이 걸립니다 그리드를 만들에 올 때. 현재 200 * 200 '그리드'합니다 ~ 구성하는 17 개의 초.

,

이 데이터를 저장하거나 현재 개념을 사용하여 그리드를 만드는 데 훨씬 효율적인 방법이 있어야합니다.

모든 조언을 환영합니다.

public IGrid Create(int rows, int cols, int concurentEntitiesPerCell) 
     { 
      var grid = new Grid(); 
      Rows = new GridRow[rows]; 

      grid.Rows = Rows; 

      var masterCells = new GridCell[cols]; 

      var masterRow = new GridRow(); 
      var masterCell = new GridCell(); 

      for (var i = 0; i < masterCells.Count(); i++) 
      { 
       masterCells[i] = new GridCell(); 
       masterCells[i].Index = i; 
       masterCells[i].Entities = new IEntity[concurentEntitiesPerCell]; 
      } 

      masterRow.Cells = masterCells; 

      for (var j = 0; j < rows; j++) 
      { 
       grid.Rows[j] = new GridRow(); 
      } 
      return grid; 
     } 
+0

개체가 상당히 크거나 뭔가 생성이 지연되는 경우가 아니면 이러한 엄청난 로딩 시간이 발생하지 않습니다. 이것을 결정하기 위해 간단한 프로파일 링을 할 수 있습니다. – AbstractDissonance

답변

3

당신이 아무 이유없이 객체를 많이 만드는 것 : 여기

UPDATE

내가 현재 그리드를 구성하는 방법은? List<List<IEntity>> 또는 다차원 배열 엔터티 [,]를 사용하지 않는 이유는 무엇입니까?

어떤 경우 든 내가 보여 준 코드는 속도 저하의 원인을 제안하지 않습니다. 실제로 객체를 할당하는 위치에 코드를 게시 할 수 있습니까?

+0

건배 @AbstractDissonance. 생성 코드를 포함하도록 내 질문을 업데이트했습니다. –

+0

안녕하세요, 성능 문제를 다루는 데 왜 프로파일 링하는 데 익숙하지 않은 이유가 많은가요? 여기서 당신은 무언가가 얼마나 오래 걸리고 있는지 그리고 왜 (보통) 발견하는지 정확히 알 수있을 것입니다. 사용해 보시고, 사용하기 쉽습니다. – AbstractDissonance

+0

도와 주셔서 감사합니다. 귀하의 회신을 고려한 후에, 필자가 정말로 필요로하는 것은 엔티티 배열 (엔티티 [,] [])이 지저분하다는 것입니다. 그것은 내가 필요로하는 것을 완벽하게 확보하고 1000 * 1000 그리드에 1 초 정도 걸립니다. –

관련 문제