Вся проблема с замедлением работы OO-приложений заключается в том, что объект может выйти из-под контроля легче, чем стили структурированного программирования. Когда-то, прежде чем оптимизация вызова метода была улучшена, это могло иметь значение, особенно когда были сделаны косвенные (то есть виртуальные) вызовы.
Если ваши объекты часто используются, и у вас есть некоторые объекты более низкого уровня, которые вы часто вызываете, то, возможно, вы получите снижение производительности от их использования - но я говорю о миллионах вызовов (я видел некоторые ужасный код в моё время, неструктурированный, структурированный и ОО!). Вы также получите большее снижение производительности, если будете постоянно выделять и удалять партии (LOTS) объектов.
Единственный ответ, правда, это посмотреть. Если у вас есть объект, который выделен, удален в быстрой последовательности, затем оптимизируйте его (даже если он выглядит менее элегантно), если у вас есть объект, который вы вызываете его методы тысячи раз, то оптимизируйте и его тоже. (но после того, как вы выполните это измерение, вы измерите его производительность и улучшите медленные биты!)
Существует компромисс между «элегантным» кодом и кодом, который работает просто и быстро, не переходите ни в крайности, и с вами все будет в порядке.