Если у вас нет особых требований (то есть «мы создаем игру, и она должна работать со скоростью 60 кадров в секунду, компоновка данных, согласованность кэша и преобразование упомянутых данных невероятно важны»), я бы даже не стал думать о дополнительные затраты производительности на интерфейсный вызов при написании программного обеспечения. Это будет заметно только в определенных обстоятельствах.
Например: выполнение миллиардов вызовов через интерфейс в узком цикле (и даже в этом случае затраты на выполнение тела метода могут значительно сократить накладные расходы на вызов интерфейса) или «погоня за указателями» во время обработки данных.
Кроме того, ничто не мешает вам изменить контракт интерфейса, чтобы сделать вызов более грубым, например, IMyInterface.Process(Car[] cars)
вместо IMyInterface.Process(Car car)
В Code Complete Стив Макконнелл советует против постоянной микрооптимизации. Он говорит, что лучше всего написать программу с использованием передового опыта (т. Е. Сконцентрироваться на удобстве обслуживания, удобочитаемости и т. Д.), А затем, как только вы закончите, если производительность не достаточно хорошая, профилировать ее и предпринять шаги для устранения основных узких мест.
Нет смысла спекулятивно оптимизировать весь ваш код только потому, что он может быть быстрее. Если 80% вашего времени выполнения тратится на выполнение 20% кода, очевидно, что глупо жертвовать слабой связью повсюду «просто потому, что» это может сократить время на 10 микросекунд здесь или там. Таким образом, вы экономите 10 микросекунд, но ваша программа не будет работать быстрее, если какая-то другая функция поглотит процессор.
Если вы работаете с критически важным программным обеспечением, я бы классифицировал отказ от интерфейсов как микрооптимизацию. Это также то, что может быть легко удалено впоследствии при необходимости (при условии, что вы не отправляете программное обеспечение в ближайшее время). Большинству программ не нужна высокая скорость. Существуют исключения (игры, симуляторы, торговля акциями в реальном времени и т. Д.), Но даже в этом случае виноваты не всегда интерфейсы.