Ответ 1
Без особого порядка:
"Готов, огонь, цель" - думая, что вы знаете, что нужно оптимизировать, не доказывая его (то есть догадываясь), а затем действуя на это, и поскольку это мало помогает, поэтому код должен быть оптимальным для начала.
"Penny Wise, Pound Foolish" - думая, что оптимизация - это оптимизация компилятора, суетиться о ++i
vs. i++
, в то время как горы времени тратятся бесполезно в раздутых проектах, особенно структур данных и баз данных.
"Swat Flies With Bazooka" - настолько очарован самыми причудливыми идеями, которые слышал в классах, что они просто используются для всего, независимо от масштаба.
"Нечеткое мышление о производительности" - выбрасывание таких терминов, как "горячая точка" и "узкое место" и "профайлер" и "измерение", как если бы эти вещи были хорошо поняты и/или уместны. (Бьюсь об заклад, я сбился за это!) Хорошо, по одному за раз:
-
hotspot - Какое определение? У меня есть один: это область физических адресов, где регистр ПК обнаруживается значительная часть времени. Это то, что ПК-пробоотборники хороши в поиске. Многие проблемы с производительностью демонстрируют горячие точки, но только в простейших программах проблема в том же месте, что и точка доступа.
-
bottleneck - общий термин, используемый для проблем с производительностью, подразумевает ограниченный канал, ограничивающий скорость выполнения работы. Неустановленное предположение состоит в том, что работа необходима. В мои десятилетия настройки производительности я действительно нашел несколько таких проблем - очень немногие. Почти все имеют совсем другой характер. Вместо того, чтобы брать кратчайший маршрут от точки A до B, принимаются небольшие обходные пути в виде вызовов функций, которые требуют мало кода, но не мало времени. Затем эти обходные пути занимают дополнительные вложенные объезды, иногда 30 уровней в глубину. Чем больше обходных путей, тем больше вероятность того, что некоторые из них меньше, чем необходимо, - фактически расточительно - и это почти всегда возникает из-за галопирующей общности - неоспоримого излишества в "абстракции".
-
профайлер - универсальная хорошая вещь, не так ли? Все, что вам нужно сделать, это получить профилировщик и сделать профилирование, не так ли? Когда-либо думайте о том, как легко обмануть профайлера, рассказывая вам много чего, когда ваша цель - выяснить, что вам нужно исправить, чтобы получить лучшую производительность? Где-то в вашем дереве звонков, запишите небольшой файл ввода-вывода или небольшой вызов какой-либо системной рутине, или пусть ваш злой близнец сделает это без вашего ведома. В какой-то момент это будет вашей проблемой, и большинство профилографов пропустит это полностью, потому что единственная неэффективность, которую они рассматривают, является алгоритмической неэффективностью. Или, не все ваши подпрограммы будут мало, и они не могут вызывать другую процедуру в небольшом количестве мест, поэтому ваш график вызовов говорит о наличии связи между этими двумя процедурами, но какой вызов? Или предположим, что вы можете понять, что какой-то большой процент времени тратится на путь A называет B называет C. Вы можете посмотреть на это и подумать, что вы не можете с этим поделать, если вы также можете посмотреть на данные, передаваемые в этих звонках вы могли убедиться, что это необходимо. Здесь интересный проект - выберите свой любимый профайлер, а затем посмотрите, как много способов его обмануть. То есть, найдите способы сделать программу более продолжительной, если профилировщик не сможет сказать, что вы сделали, потому что, если вы можете сделать это намеренно, вы также можете сделать это, не намереваясь.
-
измеряют (т.е. измеряют время), что профайлеры делали в течение десятилетий, и они гордятся точностью и точностью, с которой они измеряют. Но измерьте, в какое время? и почему с точностью? Помните, что цель состоит в том, чтобы точно определить проблемы производительности, чтобы вы могли плодотворно оптимизировать их, чтобы получить ускорение. Когда вы получаете это ускорение, это то, что есть, независимо от того, как именно вы его оценили заранее. Если эта точность измерения покупается за счет точности местоположения, то вы только что купили яблоки, когда вам нужны были апельсины.