Насколько дорогой вызовы метода в .NET

Какова относительная стоимость производительности вызова метода по встроенному коду?

11
задан Andrew 17 March 2010 в 14:39
поделиться

5 ответов

Это будет зависеть от многих вещей

  • Инлайнит ли JIT для вас
  • Виртуальный ли он
  • Количество и размер параметров
  • Является ли он методом экземпляра (с неявной проверкой на нулевость)
  • Есть ли возвращаемое значение (и его размер, если есть)

Это очень, очень вряд ли будет вашим узким местом. Как всегда, сначала напишите самый читабельный код, какой только сможете, а затем проведите сравнительный анализ, чтобы понять, достаточно ли хорошо он работает. Если нет, используйте профилировщик, чтобы найти "горячие точки", которые возможно стоит микрооптимизировать.

20
ответ дан 3 December 2019 в 02:30
поделиться

Незначительный. Каждый вызов в .NET, по крайней мере, для C#, является виртуальным вызовом, даже если метод не помечен как виртуальный, рассмотрите это.

1
ответ дан 3 December 2019 в 02:30
поделиться

То же самое, что и в C++. В основном вызов и возврат, плюс установка параметров. Обратите внимание, однако, что JIT может инкрустировать вызовы методов - так что в конкретном контексте это может быть не так дорого, как вы думаете.

3
ответ дан 3 December 2019 в 02:30
поделиться

Затраты на производительность настолько несущественны, что не имеют значения по сравнению с упрощением чтения кода и ясностью его предназначения.

1
ответ дан 3 December 2019 в 02:30
поделиться

Существует стоимость , связанная с вызовами методов;

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

Но JIT использует ряд эвристик, чтобы решить, должен ли метод быть встроенным. Следующие факторы влияют на JIT, а не на In-line метод.

  • Методы, размер которых превышает 32 байта IL
  • Виртуальные функции
  • Методы со сложным управлением потоком
  • Методы, содержащие обработку исключений блоки
  • Если какой-либо из формальных аргументов метода является структурами

Ссылка: Встраивание метода

7
ответ дан 3 December 2019 в 02:30
поделиться
Другие вопросы по тегам:

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