Какое влияние оказывают интерфейсы на скорость выполнения в Delphi? - PullRequest
9 голосов
/ 16 августа 2010

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

Ответы [ 3 ]

8 голосов
/ 16 августа 2010

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

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

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

6 голосов
/ 16 августа 2010

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

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

2 голосов
/ 16 августа 2010

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

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