Анализ кода для эффективности?

Какие инструменты вы используете для определения эффективности кода? Используете ли вы домашние приложения, которые проводят статистически значимое количество тестов или какой-либо коммерческий продукт? Используете ли вы свои собственные знания для проверки определенных областей вашего кода или какого-либо инструмента, который анализирует ваш код для слабых мест?

Это называется профилированием . Существует множество готовых инструментов, которые помогут вам определить, где узкие места в ваших приложениях, для всех видов разных языков. Например, набор инструментов TPTP для Java может показать вам, где узкие места производительности ограничены уровнем отдельных методов, если вы этого хотите. Конечно, иногда вам действительно нужно несколько раз прочитать системный таймер, чтобы получить общее представление о разделе кода.

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

Для небольших случаев я использовал простые таймеры в коде (системное время в конце действия – системное время при начале действия).

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

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

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

Я использую Valgrind и его инструмент Callgrind. Это отличный инструмент. Valgrind – это в основном виртуальная машина:

Valgrind – это, по сути, виртуальная машина, использующая методы компиляции точно в срок (JIT), включая динамическую перекомпиляцию. Ничто из исходной программы никогда не запускается непосредственно на главном процессоре. Вместо этого Valgrind сначала переводит программу во временную, более простую форму под названием Intermediate Representation (IR), которая является нейтральной по процессору, основанной на SSA форме. После преобразования инструмент (см. Ниже) может свободно выполнять любые преобразования, которые он хотел бы использовать на IR, прежде чем Valgrind переводит IR обратно в машинный код и позволяет хост-процессору запускать его. Несмотря на то, что он может использовать динамический перевод (то есть хост и целевые процессоры из разных архитектур), это не так. Valgrind перекомпилирует двоичный код для запуска на центральных и целевых (или имитируемых) процессорах той же архитектуры.

Callgrind – это профайлер, основанный на этом. Главное преимущество заключается в том, что вам не нужно запускать приложение в течение нескольких часов, чтобы получить надежный результат. Достаточно нескольких секунд, потому что Callgrind является неиндексирующим профайлером,

Другой инструмент, основанный на Вальгринде, – это массив. Я использую его для использования памяти памяти кучи. Он отлично работает, он дает вам снимки использования памяти – подробная информация WHAT содержит WHAT процент памяти, и ВОЗ положила его туда.

Еще один инструмент Valgrind – DRD (и Helgrind). Я использую их для отслеживания мертвых блокировок и расчётов данных в моем коде, а также для злоупотребления API streamа.

Я использую инструменты для этой работы. В противном случае мне было довольно трудно сделать это своими armми … (ну это мое мнение, я никогда не пробовал на самом деле)

В Linux я использую Valgrind, который поставляется с некоторыми полезными инструментами для профилирования вашего кода. Что касается домашней страницы Valgrind:

Он работает на следующих платформах: X86 / Linux, AMD64 / Linux, PPC32 / Linux, PPC64 / Linux.

.. и это бесплатно (как в свободном пиве) и с открытым исходным кодом.

Хотя я не использовал их так много, на другой платформе вы можете использовать Purify / Quantify (продукты IBM). Это коммерческие инструменты. Как сообщило об этом, они будут доставлены в пакет PurifyPlus, а Quantify поможет вам профилировать ваше приложение.

Это все, что я использовал … 🙂

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

Кстати, кто-то упомянул «Очистить»; есть также его дочерний продукт Quantify.

Я слышал хорошее слово о профилировании Yourkit для Java. Для веб-сайтов я пробовал JMeter, который имеет базовые функции для простого параметризованного профилирования.

Для .NET я бы рекомендовал NDepend .

Давайте будем гением компьютера.