Хорошие ответы на все.
Что касается производительности, этот предоставляет метод, который большинство не может себе представить, сработает, но немногие знают, что это работает, на удивление хорошо.
Правило 90/10 верно. По моему опыту, обычно есть несколько проблемных точек, и они обычно находятся на среднем уровне стека вызовов. Они часто вызваны использованием общих структур данных, но вы никогда не должны что-то исправлять, если не доказали, что это действительно проблема. Проблемы с производительностью удивительно непредсказуемы.
Исправление любой проблемы с производительностью может не дать вам необходимого ускорения, но каждое исправление заставляет оставшиеся занимать больший процент оставшегося времени, поэтому их легче найти. Ускорения комбинируются сложным образом, так что вы можете быть удивлены конечным результатом.
Когда вы больше не можете найти значительных проблем, которые можете исправить, вы справились с этим, как могли. Иногда, в этот момент, редизайн (например, с использованием генерации кода) может вызвать дальнейший раунд ускорений.