Во-первых, я бы предложил отойти от List.Remove
, так как в худшем случае необходимо проверить каждый элемент, чтобы найти тот, который нужно удалить.Вместо удаления осколков, которые обрабатываются, из списка необработанных осколков, вы можете сохранить еще один список обработанных осколков и добавить к нему.Тогда ваша проверка состояния, если подключенный осколок не обработан, станет if(!processedShards.Contains(connectedShard))
.
Подробнее о выполнении операций со списком вы можете узнать в документах Microsoft , просто прокрутив вниз до раздела «Примечания».
Еще одним улучшением будет поискальтернатива List.Contains
при проверке, был ли обработан осколок.Подобно List.Remove
, ему необходимо проверить каждый элемент в списке, прежде чем он сможет определить, присутствует ли этот элемент.
Один из способов сделать это - использовать HashSet вместо списка.Он предоставляет гораздо более быстрые способы доступа к определенным элементам и проверки наличия элементов в коллекции.Он также предоставляет многие из тех же методов, поэтому рефакторинг должен быть легким.
Как примечание, лично я бы не стал заниматься оптимизацией, пока производительность не станет проблемой.Вы можете обнаружить, что эти улучшения не принесут вам никакой пользы, поскольку ваши коллекции просто недостаточно велики.Если вы еще этого не сделали, проверьте Профилировщик Unity и оттуда указатель, откуда берутся ваши хиты высокой производительности.