Я не могу найти ссылку в Интернете (возможно, я прочитал ее в книге), но был пример некоторого вызова BIOS, который записал строку на экран.
Код, который записал строку на экран, проверил, чтобы убедиться, что строка не исчезнет с экрана, а затем вызвал функцию для записи символа на экран.
Функция, которая записывает символ на экран, проверяется, чтобы убедиться, что символ не будет записан с экрана.
Удаление проверочного кода из функции, которая записывает символ на экран, привело к значительному увеличению скорости. Дело в том, что печать каждого символа происходила очень часто. Они также предоставили метод, который проверял случаи, когда положение экрана не проверялось до вызова.
Итак, если вы можете проверять на высоком уровне и избегать проверок на низком уровне, вы можете значительно ускорить процесс.
В случае, если вы предоставляете, если код находится в цикле или если имеется много операторов записи в журнал, тогда будет очевидное преимущество, так как вы:
- удалить создание строки (и связанный GC)
- уменьшить количество операторов if (хотя горячая точка, скорее всего, их оптимизирует).
Я бы сказал, что в общем случае вам не следует добавлять что-либо, что, как известно, является дорогостоящим, если есть легкое обходное решение. Это явно относится к этому случаю - добавление оператора if не сложно сделать, его трудно добавить позже, и оно обеспечивает определенное улучшение скорости / памяти.
Я думаю, что разница между этой и преждевременной оптимизацией заключается в том, что она, как известно, всегда дорогостоящая, поэтому возникает вопрос: кумулятивные затраты, которые вы хотите добавить в программу, или нет? Стоимость в значительной степени постоянна, и она известна на момент написания кода.