Какова относительная стоимость выполнения вызова метода по встроенному коду?
Сколько стоит вызов метода в .net
Ответ 1
Это будет зависеть от многих вещей
- Подходит ли JIT для вас.
- Будет ли он виртуальным
- Число и размер параметров
- Является ли это методом экземпляра (с неявной проверкой недействительности)
- Есть ли возвращаемое значение (и его размер, если это так)
Это очень, очень маловероятно, чтобы быть вашим узким местом. Как всегда, сначала напишите наиболее читаемый код, а затем сравните его, чтобы убедиться, что он работает достаточно хорошо. Если это не так, используйте профилировщик, чтобы найти горячие точки, которые могут стоить микро-оптимизации.
Ответ 2
Существует cost
, связанный с вызовами метода;
Аргументы необходимо вставлять в стек или хранить в регистрах, необходимо пропустить пролог и epilog метода и так далее. Стоимость этих вызовов можно избежать с помощью In-lining.
Но, JIT
использует несколько эвристик, чтобы решить, должен ли метод быть вставлен в линию. Следующие факторы влияют на JIT, а не на метод In-line.
- Методы, превышающие 32 байты IL
- Виртуальные функции
- Методы, которые имеют сложный поток контроль
- Методы, которые содержат блоки обработки исключений
- Если какой-либо из методов формальный Аргументы - это структуры.
Ссылка: Вставка метода
Ответ 3
То же, что и в С++. В основном вызов и возврат, а также настройка параметров. Обратите внимание, однако, что JIT может встроить метод вызовов - поэтому он может быть не так дорог в определенном контексте, как вы думаете.
Ответ 4
Незначительный. Каждый вызов в .net, по крайней мере для С#, является виртуальным вызовом, даже если метод не помечен как виртуальный, рассмотрите его.
Ответ 5
Стоимость исполнения настолько несущественна, что не имеет значения по сравнению с тем, чтобы сделать код легко читаемым и его четкое представление.