Я удивлен, что мы не спрашиваем какие проблемы с производительностью у вас возникают!
По моему опыту, проблемы с производительностью обычно связаны с конкретными условиями и ситуациями. Шаблоны проектирования, с другой стороны, являются решением более общих и абстрактных проблем. Было бы немного неловко подходить к обоим в одном и том же тексте: с каким из многих «не шаблонных» решений следует сравнить автора с производительностью шаблона проектирования? Если проблема с производительностью является общей, то, безусловно, уже есть шаблоны для их решения: Flyweight является хорошим примером.
Наказания, накладываемые использованием шаблона проектирования, имеют конечный, очень маленький набор: введение виртуальных вызовов, добавленная задержка из-за делегирования, дополнительное потребление памяти из-за увеличения количества объектов и так далее. Если после профилирования вы заметили, что это является причиной ваших бед, существуют известные способы их минимизации.
Знание шаблонов также может быть полезно для решения проблем с производительностью. Во-первых, кто-то уже упоминал, что шаблоны разбивают проблему на более мелкие биты: это может облегчить точное определение источника проблемы и изоляцию некрасивого, но производительного кода. Они также создают основу рассуждений и ожиданий для разработчиков. Если вам необходимо ввести отклонение по соображениям производительности, это будет очевидно: «За исключением случаев, когда мы отказываемся от X и делаем Y для повышения производительности, это Цепочка ответственности ». Это правила, которые нужно нарушать когда нужно.
(Увы, есть один очень хороший шаблон для получения хорошей производительности: измерение, определение, исправление.)