1max1 писал(а):Не знаю, является ли Destroy тяжелым методом, но я думаю 500 объектов в 1 фрейме удалить не долго, могу ошибаться, конечно.
Я думаю, Destroy будет довольно тяжелой операцией. Ок. Как размазать по нескольким кадрам очистку пулов, мы придумали. Больше всего мне нравится идея каждый кадр или секунду удалять 1 объект из 1 пула. Конкретную реализацию нужно тестить на конкретной сцене, т.е. можно делать это не каждый кадр, а реже; удалять больше объектов за раз; удалять не из одного пула, а сразу из всех и т.д. Пулы будут очищаться постепенно и очень дешево.
А что на счет удаления пустых пулов, которые уже были очищены?
Пока писал вопрос, пришла идея- мы же проходимся циклом по всем пулам, чтобы очистить каждый от лишних объектов. Можно дополнительно выполнять действие, что если количество объектов в пуле == 0, то уничтожаем пул целиком. Проблема в том, что за время создания кадра, этот пул мог использоваться, а мы этого не заметим. Туда пришло 5 объектов, потом ушло 5 объектов, в итоге пул использовался, а мы его удалим.
Пока писал предыдущее озарение, появилась мысль еще круче. Можно сделать класс и поместить его в Dictionary вместо LinkedList. Каждый такой класс будет содержать этот LinkedList с объектами пула, но главное, он будет хранить метку о том, как давно что-то бралось оттуда. Если этот пул постоянно используется, то надо оставить немножко лишних объектов в пуле на всякий случай. Если эти лишние объекты долго не востребованы, удаляем их. Если пул вообще давно не используется, постепенно удаляем все объекты по одному, пока не останется 0 и тогда уничтожаем этот пул.
Кому-то показалась моя идея хорошей или излишней? Может чего добавить? Ваши ответы толкают меня на глубокие размышления.