Создание объектов дешево, да, но иногда не достаточно дешево.
Если вы создаете много (и я имею в виду много) временных объектов в быстрой последовательности, затраты на сборщик мусора значительны. Однако даже с хорошим профилировщиком вы не обязательно сможете легко увидеть затраты, поскольку сборщик мусора в настоящее время работает через короткие промежутки времени, а не блокирует все приложение на секунду или две.
Большинство улучшений производительности, которые я получил в своих проектах, были связаны либо с отказом от создания объектов, либо с отказом от всей работы (включая создание объектов) посредством агрессивного кэширования. Независимо от того, насколько велик или мал объект, все равно требуется время для его создания и управления ссылками и структурами кучи для него. (И, конечно, очистка и внутренняя дефрагментация / копирование также требуют времени.)
Я бы не стал проявлять религиозность в отношении того, чтобы избегать создания объектов за всю стоимость, но если вы видите в профиле памяти шаблон мозаики, это означает, что ваш сборщик мусора находится в тяжелом режиме. И если ваш сборщик мусора использует ЦП, ИПЦ недоступен для вашего приложения.
Относительно пула объектов: сделать это правильно и не столкнуться с утечками памяти или недействительными состояниями или тратить на управление больше времени, чем вы бы сэкономили. Поэтому я никогда не использовал эту стратегию.
Моя стратегия состояла в том, чтобы просто стремиться к неизменным объектам. Неизменяемые вещи могут быть легко кэшированы и, следовательно, помогают упростить систему.
Однако, независимо от того, что вы делаете: убедитесь, что вы сначала проверили свои горячие точки с помощью профилировщика. Преждевременная оптимизация - корень зла.