Вы ищете производительность не в том месте. Проблема с вызовами функций не в том, что они стоят дорого. Есть еще одна проблема. Вызовы функций могут быть абсолютно бесплатными, и у вас все еще будет эта другая проблема.
Это то, что функция похожа на кредитную карту. Поскольку вы можете легко использовать его, вы склонны использовать его больше, чем, возможно, следует. Предположим, вы называете это на 20% больше, чем нужно. Затем типичное большое программное обеспечение содержит несколько уровней, каждый из которых вызывает функции на нижнем уровне, поэтому коэффициент 1,2 может быть сложен по количеству уровней. (Например, если имеется пять слоев, и каждый слой имеет коэффициент замедления 1,2, составной коэффициент замедления составляет 1,2 ^ 5 или 2,5.) Это только один из способов думать об этом.
Это не означает, что вам следует избегать вызовов функций. Это означает, что когда код запущен и работает, вы должны знать, как найти и устранить потери. Есть много отличных советов о том, как это сделать на сайтах stackexchange.
Это дает один из моих вкладов.
ДОБАВЛЕНО: Небольшой пример. Однажды я работал в команде над программным обеспечением на заводе, которое отслеживало ряд рабочих заданий или «рабочих мест». Была функция, JobDone(idJob)
которая могла сказать, была ли сделана работа. Работа была выполнена, когда были выполнены все ее подзадачи, и каждая из них была выполнена, когда были выполнены все ее подзадачи. Все эти вещи отслеживались в реляционной базе данных. Один вызов другой функции может извлечь всю эту информацию, так JobDone
называемую другую функцию, увидеть, была ли выполнена работа, и выбросить все остальное. Тогда люди могут легко написать такой код:
while(!JobDone(idJob)){
...
}
или
foreach(idJob in jobs){
if (JobDone(idJob)){
...
}
}
Видишь смысл? Функция была настолько «мощной» и простой в вызове, что ее вызывали слишком много. Таким образом, проблема с производительностью заключалась не в инструкциях, входящих и выходящих из функции. Дело в том, что должен быть более прямой способ определить, были ли выполнены работы. Опять же, этот код мог быть встроен в тысячи строк невинного кода. Попытка исправить это заранее - это то, что все пытаются сделать, но это все равно, что пытаться бросать дротики в темной комнате. Вместо этого вам нужно запустить его, а затем позволить «медленному коду» сказать вам, что это такое, просто потратив время. Для этого я использую случайную паузу .