Описание тега optimization

Оптимизация - это процесс улучшения метода или дизайна. В программировании оптимизация обычно принимает форму увеличения скорости работы алгоритма или сокращения требуемых ресурсов. Другое значение оптимизации - алгоритмы численной оптимизации, используемые в машинном обучении.

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

Общие цели оптимизации программного обеспечения:

  • Эффективность дизайна или алгоритма.
  • Уровень исходного кода. Например Устройство Даффа.
  • Флаги уровня сборки или оптимизатора, часто меняют время сборки на эффективность во время выполнения.
  • Уровень компиляции; выбор лучшего компилятора.
  • Уровень сборки. Лучшее машинное отображение проблемы.
  • Время выполнения. Примеры включают параметры виртуальных машин и оптимизацию на основе профиля.

Менее строго связанные с программным обеспечением цели оптимизации:

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

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

Часто упоминаемой опасностью является "преждевременная оптимизация" (как говорится, "корень всех зол"). Напротив, наиболее существенное влияние на оптимизацию оказывается на уровне проектирования за счет эффективности алгоритмов; это самая ранняя стадия развития, что кажется парадоксом.

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

При использовании этого тега, то есть при запросе об оптимизации, укажите цель оптимизации, которую вы имеете в виду. Приведенные выше списки показывают, что многие возможные цели оптимизации являются взаимоисключающими (например, производительность или простота / ремонтопригодность). Следовательно, невозможно оптимизировать для всего; а оптимизация без четкой цели - еще одна распространенная опасность, которая делает вопрос слишком широким или неясным.

См. Также: компилятор сборки профилирования