Затраты на реализацию интерфейса - PullRequest
12 голосов
/ 21 мая 2009

Один из моих коллег сказал мне, что реализация интерфейсов приводит к накладным расходам. Это правда?

Меня не волнуют микрооптимизации; Я просто хочу знать более глубокие детали, которые это влечет за собой.

Ответы [ 12 ]

1 голос
/ 04 июня 2009

Виртуальная отправка отправителя отличается от отправки через интерфейс. Вэнс Моррисон, ведущий CLR JIT, подробно описывает это в этом посте. http://blogs.msdn.com/vancem/archive/2006/03/13/550529.aspx

1 голос
/ 21 мая 2009

Вызов через интерфейс немного дороже, чем другие формы виртуального вызова метода из-за дополнительного уровня косвенности в vtable. В большинстве случаев это не должно иметь значения, поэтому вам не нужно слишком беспокоиться о производительности и придерживаться хорошего дизайна.

Сказав это недавно, я провел рефакторинг нескольких классов, представив интерфейсы и выполняя все вызовы через интерфейс. Я был настолько уверен (или ленив), что это не повлияло бы на то, что мы выпустили его без проверки производительности. Оказалось, что это оказало 10% -ное влияние на производительность всего приложения (не только вызовов). Мы внесли ряд изменений, и это было последнее, о чем мы подозревали. В конце концов, когда мы вернулись к конкретным классам, первоначальная производительность была восстановлена.

Это сильно оптимизированное приложение, и выше может не применяться в других случаях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...