Как оптимизировать мой игровой календарь на C #? - PullRequest
0 голосов
/ 24 апреля 2010

Я реализовал простой календарь (систему сообщений) для моей игры, который состоит из:

 1) List<Event> calendar;

 2) public class Event
    {
    /// <summary>
    /// When to process the event
    /// </summary>
    public Int64 when;

    /// <summary>
    /// Which object should process the event
    /// </summary>
    public GameObject who;

    /// <summary>
    /// Type of event
    /// </summary>
    public EventType what;

    public int posX;
    public int posY;
    public int EventID;
    }
 3) calendar.Add(new Event(...))

Проблема с этим кодом заключается в том, что даже количество сообщений не превышено в секунду. Он выделяет все еще новую память, и GC однажды должен будет позаботиться об этом. Сборка мусора может привести к небольшому отставанию в моей игре, и поэтому я хотел бы оптимизировать мой код.

Мои соображения:

  • Чтобы изменить класс событий в структуре, но структура не совсем мала, и для ее копирования требуется время, когда мне это нужно.

  • Как-нибудь повторно использовать объект Event (добавить очередь с используемыми событиями, а когда потребуется новое событие, я просто возьму из этой очереди).

У кого-нибудь есть другие идеи, как решить проблему?

Спасибо за предложения!

Ответы [ 2 ]

1 голос
/ 24 апреля 2010

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

Шаблон прототипа - это шаблон творческого проектирования, используемый при разработке программного обеспечения, когда тип создаваемых объектов определяется прототипным экземпляром, который клонируется для создания новых объектов. Этот шаблон используется для:

  • избегайте подклассов создателя объекта в клиентском приложении, как это делает абстрактный шаблон фабрики.
  • избегайте затрат на создание нового объекта стандартным способом (например, используя ключевое слово 'new'), когда это слишком дорого для данного приложения.

Вместе с шаблоном пула объектов

Пул объектов - это набор инициализированных объектов, которые хранятся готовыми к использованию, а не распределяются и уничтожаются по требованию. Клиент пула будет запрашивать объект из пула и выполнять операции с возвращенным объектом. Когда клиент завершил работу с объектом, он возвращает его в пул, а не уничтожает его. Это особый тип фабричного объекта.

1 голос
/ 24 апреля 2010

Вы можете распределить группу по событиям в начале, и если ваша память закончится, вы можете выделить следующую, например. 100 Событие ().

А если вы говорите об очереди, используйте класс очереди. Но если вы выполняете операции с очередями в списке, вы удаляете элементы за линейное время (в классе очереди Dequeue get O (1)).

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