Создание сетки - Какой эффективный способ сделать это - PullRequest
4 голосов
/ 16 января 2011

Я сейчас работаю над небольшой текстовой игрой после просмотра нового фильма о Троне на днях. (как вы делаете, когда вы гик, у которого много времени на руках).

Я создал сетку, в которую можно помещать объекты, и в настоящее время обнаруживаю, что создание моей сетки занимает много времени.

Меня интересует, как вы можете повлиять на это и любые шаблоны проектирования, идеи, концепции и т. Д., Которые полезны для такого рода вещей.

В настоящее время у меня есть 4 основных «части», которые составляют сетку.

Во-первых, у меня есть сама сетка, которая содержит массив 'строк'

public interface IGrid
{
    GridRow[] Rows { get; set; }
}

A GridRow в свою очередь содержит массив GridCell, каждый из которых содержит массив IEntity (каждый объект, который может быть помещен в ячейку сетки, должен содержать IEntity.

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 секунд.

Я совершенно уверен, что должен быть гораздо более эффективный способ либо сохранить эти данные, либо создать сетку с использованием текущей концепции.

Любые советы приветствуются.

UPDATE

Вот как я сейчас составляю сетку:

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;
        }

1 Ответ

3 голосов
/ 16 января 2011

Кажется, вы создаете много объектов без причины?Почему бы просто не использовать List<List<IEntity>> или многомерный массив Entities [,]?

В любом случае код, который вы показали, не указывает на причину замедления.Можете ли вы разместить код, где вы на самом деле размещаете объекты?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...