Какое влияние оказывают интерфейсы на скорость выполнения в Delphi?

Если я заменю все ссылки на объекты в моей программе Delphi на ссылки на интерфейсы и буду использовать объекты, которые наследуются от TInterfacedObject, Будет ли полученное приложение работать с той же скоростью, что и раньше? Или подсчет ссылок добавляет значительные накладные расходы на выполнение во время выполнения?

9
задан Rob Kennedy 16 August 2010 в 15:50
поделиться

3 ответа

Подсчет ссылок может повлиять на вас, если вы выполняете много назначений этих интерфейсов (или передаете их как неконстантные, не-переменные параметры в вызовах функций).

Однако настоящая проблема часто заключается не в самом подсчете ссылок, а в неявных конструкциях try-finally, которые компилятор добавляет для защиты подсчета ссылок, что увеличивает накладные расходы на вызовы и может быть наиболее болезненным, если у вас их много простые методы (вместо одной большой процедуры со всем вашим кодом внутри, что вам на самом деле не нужно).

Чтобы смягчить этот аспект, всегда передавайте интерфейсы как параметры const или var, избегайте возврата интерфейсов в качестве результата вызова функции и минимизируйте использование локальных переменных типа интерфейса, отдавайте предпочтение параметрам const и прямому использованию полей объекта.

8
ответ дан 4 December 2019 в 12:57
поделиться

Интерфейсные классы действительно несут накладные расходы по увеличению и освобождению счетчика ссылок каждого экземпляра, который вы создаете, передаете и уничтожаете, но если вы не создаете, уничтожаете и передаете ссылки в тесных циклах, вы не должны: t испытывают какое-либо существенное замедление.

Конечно, вы можете отключить подсчет ссылок как таковой, вернув -1 в переопределениях _AddRef и _Release, но это не мешает компилятору генерировать эти вызовы ...

6
ответ дан 4 December 2019 в 12:57
поделиться

Не только подсчет ссылок - простой вызов методов объекта через ссылку на интерфейс всегда подразумевает накладные расходы. Здесь вы можете прочитать, как методы объекта вызываются через ссылку на интерфейс в Delphi.

2
ответ дан 4 December 2019 в 12:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: