Насколько вы уверены, что ваш код настроен при таком количестве доступных системных ресурсов?

Поскольку процессоры становятся все быстрее, жесткие диски вращаются, биты летают так быстро, а также увеличивается скорость сети, не так просто отличить плохой код от хорошего, как это было раньше.

Я помню время, когда можно было оптимизировать кусок кода и, несомненно, ощутить улучшение производительности. Те дни почти прошли. Вместо этого, я полагаю, теперь у нас есть набор правил, которым мы следуем, например «Не объявлять переменные внутри циклов» и т. д. Приятно их придерживаться, чтобы по умолчанию вы писали хороший код. Но откуда вы знаете, что его нельзя улучшить без какого-либо инструмента?

Некоторые могут возразить, что пара наносекунд в наши дни не имеет большого значения. По правде говоря, мы застряли на таком большом количестве слоев, что вы получаете ошеломляющий эффект.

Я не говорю, что мы должны оптимизировать каждую маленькую миллисекунду нашего кода, поскольку это будет дорого и невыполнимо. Я считаю, что мы должны сделать все возможное, учитывая наши временные ограничения, чтобы также писать эффективный код.

Мне просто интересно узнать, какие инструменты вы используете для профилирования и измерения производительности кода, если вообще используете.

За пределами сигналов Angular: Сигналы и пользовательские стратегии рендеринга
За пределами сигналов Angular: Сигналы и пользовательские стратегии рендеринга
TL;DR: Angular Signals может облегчить отслеживание всех выражений в представлении (Component или EmbeddedView) и планирование пользовательских...
Sniper-CSS, избегайте неиспользуемых стилей
Sniper-CSS, избегайте неиспользуемых стилей
Это краткое руководство, в котором я хочу поделиться тем, как я перешел от 212 кБ CSS к 32,1 кБ (сокращение кода на 84,91%), по-прежнему используя...
0
0
268
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Это действительно серьезная проблема, но не для большинства разработчиков. Большинство разработчиков озабочены тем, чтобы продукт работал для их работодателя. Оптимизированный код требуется редко.

Лучший способ убедиться, что ваш код работает быстро, - это протестировать или профилировать его. Многие оптимизации компилятора создают неинтуитивные странности в производительности кода программиста, поэтому в конечном итоге измерение становится важным.

Может быть, профайлер? Они доступны практически для всех платформ и языков.

По моему опыту, Рациональная количественная оценка дал мне лучшие результаты с точки зрения настройки кода. Это не бесплатно, но он очень полнофункциональный и, кажется, дал мне самые полезные результаты.

Что касается бесплатных инструментов, попробуйте гпроф или профиль, если вы работаете в среде Unix. Они не так хороши, как некоторые из коммерческих инструментов, но часто могут указать вам правильное направление.

Кстати, я почти всегда удивляюсь тому, какие профилировщики появляются при первом использовании. Вы можете интуитивно догадываться о том, где код может быть узким местом, и часто это может быть совершенно неверно.

Ответ принят как подходящий

Есть большая разница между «хорошим» и «быстрым» кодом. Они не совсем отделены друг от друга, но «быстрый» код не означает «хороший». Часто «быстрый» на самом деле означает плохой код, потому что нужно идти на компромисс с удобочитаемостью, чтобы сделать его быстрым.

На мой взгляд, оборудование дешевое, программисты дорогие. Если нет серьезных проблем с производительностью какого-либо фрагмента кода, вам не следует беспокоиться о скорости. Если есть проблемы с производительностью, вы их заметите. Только когда вы заметите проблемы с производительностью на хорошем оборудовании, вам следует беспокоиться об оптимизации (на мой взгляд)

Если вы достигнете точки, когда ваш код работает медленно, но вы не можете понять почему, я бы использовал профилировщик, такой как МУРАВЕЙ или dotTrace, если вы находитесь в мире .NET (я уверен, что есть другие для других платформ и языков). Они довольно полезны, но у меня была только одна ситуация, когда мне понадобился профилировщик для определения проблемы. Это было то, что теперь, когда я знаю проблему, мне больше не понадобится профилировщик, чтобы сказать мне, что это проблема, потому что я никогда не забуду количество времени, которое я потратил на его оптимизацию.

Почти весь код, который я пишу, достаточно быстр. В тех редких случаях, когда это не так, для C, C++ и Objective Caml я использую почтенный gprof и превосходный valgrind с его превосходным визуализатором kcachegrind (часть KDE SDK; не дайте себя одурачить тем, кто не работает). код даты на sourceforge).

Стандартный компилятор машинного обучения MLton и Компилятор Glasgow Haskell поставляются с отличными профилировщиками.

Я хотел бы иметь лучший профайлер для Lua.

Я думаю, что оптимизация должна рассматриваться не как рассмотрение каждой строчки кода, а скорее как асимптотическая сложность вашего алгоритма. Например, использование пузырьковой сортировки, вероятно, является одним из худших алгоритмов сортировки, которые вы могли бы использовать с точки зрения оптимизации. Это занимает больше всего времени. Быстрая сортировка и сортировка слиянием быстрее с точки зрения сортировки, и их всегда следует использовать перед пузырьковой сортировкой.

Если вы всегда думаете об оптимизации при разработке решения проблемы, тогда вы сможете написать читаемый код, который одобрят другие разработчики. Кроме того, если вы программируете на языке более высокого уровня, который будет скомпилирован перед запуском, помните, что в настоящее время компиляторы делают некоторые потрясающие оптимизации, о которых вы или я, возможно, не подумали, а также (что более важно) не о чем беспокоиться.

Придерживайтесь хорошего и низкого большого O (), и его следует оптимизировать довольно хорошо. Если вы работаете с миллионами или более в каком-либо наборе данных, ищите алгоритм большого O (logn). Они отлично подходят для больших задач и позволяют оптимизировать ваш код.

Позвольте компиляторам работать над оптимизацией кода построчно, чтобы вы могли сосредоточиться на решениях.

Бывают случаи, когда требуется построчная оптимизация, и если это тот случай, когда вам нужна такая большая скорость, возможно, вы захотите изучить сборку, чтобы вы могли контролировать каждую написанную строку.

Другие вопросы по теме