Тестирование кода для скорости?

Если вы хотите, чтобы структура имела определенный размер с GCC, например, используйте __attribute__((packed)) .

В Windows вы можете установить выравнивание в один байт при использовании cl .exe компилятор с опцией / Zp .

Обычно ЦП получает доступ к данным, который является кратным 4 (или 8), зависящей от платформы, а также от компилятор.

Итак, это вопрос выравнивания в основном.

У вас должны быть веские причины для его изменения.

8
задан 4 revs, 2 users 100% 22 September 2008 в 22:00
поделиться

8 ответов

То, что Вы описываете, известно как профилирование производительности. Существует много программ, которые можно получить, чтобы сделать это, такое как профилировщик Jetbrains или профилировщик Муравьев, хотя большинство замедлит приложение пока в процессе измерения его уровня.

К профилированию производительности ручной самокрутки можно использовать Систему. Диагностика. Секундомер и простая Консоль. WriteLine, как Вы описанный.

Также имейте в виду, что JIT-компилятор C# оптимизирует код в зависимости от типа и частоты, которой это называют, таким образом играйте вокруг с циклами отличающихся размеров и методов, таких как рекурсивные вызовы для получения ощущения какой работы лучше всего.

14
ответ дан 5 December 2019 в 05:00
поделиться

Просто напоминание - удостоверяется, что скомпилировало в, Повторно генерируют, не Отладка! (Я видел эту ошибку, сделанную закаленными разработчиками - легко забыть).

7
ответ дан 5 December 2019 в 05:00
поделиться

Профилировщик МУРАВЬЕВ от RedGate является действительно хорошим профилировщиком производительности. Профилировщик dotTrace от JetBrains является также великим. Эти инструменты позволят Вам видеть метрики производительности, которые могут быть выполнены развертку каждая отдельная строка.

Выстрел каменистой осыпи Профилировщика МУРАВЬЕВ: МУРАВЬИ http://www.red-gate.com/products/ants_profiler/images/app/timeline_calltree3.gif

Если Вы хотите удостовериться, что определенный метод останавливается в пороге реального исполнения во время поблочного тестирования, я использовал бы Stopwatch класс, чтобы контролировать время выполнения метода одна руда много раз в цикле и вычислить среднее число и затем Assert против результата.

11
ответ дан 5 December 2019 в 05:00
поделиться

Я делаю следующие вещи: 1) я использую галочки (например, в VB.Net Now.ticks) для измерения текущего времени. Я вычитаю стартовые галочки из законченного значения галочек и делюсь на TimeSpan. TicksPerSecond для получения, сколько секунд потребовалось. 2) я избегаю операций UI (как console.writeline). 3) я выполняю код по существенному циклу (как 100 000 повторений) для факторизации использования / переменные ОС настолько лучше всего, как я могу.

0
ответ дан 5 December 2019 в 05:00
поделиться

Что, Вы описывающий являетесь 'Настройкой Производительности'. Когда мы говорим о производительности, настраивающейся существует два, удят рыбу к нему. (a) Время отклика - сколько времени это берет для выполнения конкретного запроса/программы. (b) Пропускная способность - Сколько запросов это может выполниться через секунду. Когда мы обычно 'оптимизируем' - когда мы устраняем ненужную обработку обоих времени отклика, а также пропускная способность улучшается. Однако, если Вы имеете, ожидают события в Вас код (как Thread.sleep (), ввод-вывод ожидают и т.д.), Ваше время отклика затронуто однако, пропускная способность не затронута. Путем принятия параллельной обработки (порождающий несколько потоков) мы можем улучшить время отклика, но пропускная способность не будет улучшена. Обычно для серверного приложения и время отклика и пропускная способность важны. Для настольных приложений (как IDE) пропускная способность не важна, только время отклика важно.

Можно измерить время отклика 'Тестированием производительности' - Вы просто записываете время отклика для всех ключевых транзакций. Можно измерить пропускную способность 'Тестированием Загрузки' - необходимо качать запросы непрерывно из достаточно большого количества потоков/клиентов, таким образом, что использование ЦП машины сервера составляет 80-90%. Когда мы качаем запрос, мы должны поддержать отношение между различными транзакциями (названный соединением транзакции) - для, например: в системе резервирования будет 10 заказов для каждых 100 поисков. будет одна отмена для каждых 10 заказов и т.д.

После идентификации транзакций требуют настройки в течение времени отклика (тестирование производительности), можно определить горячие точки при помощи профилировщика. Можно определить горячие точки для пропускной способности путем сравнения времени отклика * часть той транзакции. Примите в поиске, заказе, сценарии отмены, отношение 89:10:1. Время отклика составляет 0,1 секунды, 10 секунд и 15 секунд. загрузка для поиска - 0.1 *.89 = 0,089 загрузки для заказа - 10 *.1 = 1 загрузка для отмены = 15 *.01 = 0,15 Сюда настраивающих заказа приведет к максимальному влиянию на пропускную способность. Можно также определить горячие точки для пропускной способности путем взятия дампов потока (в случае java-приложений) неоднократно.

3
ответ дан 5 December 2019 в 05:00
поделиться

Можно использовать класс StopWatch для методов времени. Помните, что первый раз является часто медленным должный кодировать необходимость быть jitted.

0
ответ дан 5 December 2019 в 05:00
поделиться

Существует собственная опция.NET (Выпуск команды для Разработчиков программного обеспечения), который мог бы обратиться к некоторым аналитическим потребностям производительности. Из меню IDE.NET 2005 года выберите Инструменты-> Инструменты Производительности-> Мастер Производительности...

[GSS, вероятно, корректен, что у Вас должен быть Выпуск Команды]

0
ответ дан 5 December 2019 в 05:00
поделиться

Используйте профилировщика.

При необходимости ко времени в одном определенном методе только класс Секундомера мог бы быть хорошим выбором.

1
ответ дан 5 December 2019 в 05:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: