При измерении и оптимизации производительности такой крупномасштабной системы объектов необходимо учитывать две разные вещи.
На низком уровне у вас есть физическое представление ваших сущностей, которое имеет тенденцию сводиться к использованию эффективных схем хранения, таких как SoA (структуры массивов), чтобы снизить стоимость итерации и обновления всех активных сущностей.
На более высоком уровне у вас есть логика принятия решений, общая логика игры, AI и поиск пути. Все эти задачи имеют общую черту: они не должны запускаться с той же частотой обновления, что и ваш рендеринг.
Поскольку вы получите неравномерное время кадра, если вы будете использовать наивный подход, заключающийся в простом выполнении этих задач каждые N кадров, будет выгодно амортизировать стоимость в течение нескольких кадров.
Если задача носит инкрементный характер, вы можете запускать часть алгоритма каждый кадр и использовать частичные результаты в своих обновлениях.
Если задача в значительной степени монолитная, но разделяемая для каждой сущности, вы можете выполнить эту задачу для подмножества ваших игровых сущностей на кадр, вращаясь между ними в циклическом порядке. Преимущество этого состоит в уменьшении сложности таких вещей, как поиск пути и ИИ, поскольку у вас не все пытаются действовать одновременно.
В крупномасштабной тактической RTS, над которой я работал, мы сосредоточились на том, чтобы иметь надежные структуры данных для запроса представления низкого уровня в алгоритмах высокого уровня, для поиска соседей игровых объектов. Процесс обновления низкого уровня действовал на основе намерений, обеспечиваемых медленно обновляющимся высокоуровневым моделированием, и в итоге сводился к моделированию дешевых частиц, увеличиваясь до тысяч.