Секундомер сравнивает приемлемый?

73
задан Hearen 23 March 2019 в 07:15
поделиться

13 ответов

Сравнительное тестирование секундомера прекрасно, если Вы имеете размеры достаточно повторения, чтобы быть значимыми. Как правило, я требую общего прошедшего времени некоторого числа единственных секунд цифры. Иначе Ваши результаты легко значительно скашиваются путем планирования, и другие прерывания O/S к процессу.

Для этого я использую немного набора статических методов, которые я создал давным-давно, которые основаны System.currentTimeMillis().

Для профильной работы я использовал jProfiler в течение многих лет и нашел его очень хорошим. Я недавно просмотрел YourKit, который кажется большим от WebSite, но я не использовал его вообще, лично.

Для ответа на вопрос на планировании прерываний я нахожу, что выполнение повторных выполнений до непротиворечивости достигается/наблюдается работы на практике для избавлений от аномальных результатов диспетчеризации процессов. Я также нахожу, что планирование потоков не оказывает практического влияния для выполнений между 5 и 30 секундами. Наконец после передачи порогового планирования нескольких секунд оказывает, по моему опыту, незначительное влияние на результаты - я нахожу, что 5-секундное выполнение последовательно составляет в среднем то же как 5-минутное выполнение в течение времени/повторения.

можно также хотеть полагать, что предварительное выполнение протестированного кода приблизительно 10 000 раз "нагревает" JIT, в зависимости от количества раз, которое Вы ожидаете, что протестированный код выполнит со временем в реальной жизни.

49
ответ дан Hearen 24 November 2019 в 12:25
поделиться

Это полностью допустимо, пока Вы измеряете достаточно большие интервалы времени. Я выполнил бы 20-30 выполнений того, что Вы намереваетесь протестировать так, чтобы общее прошедшее время составило более чем 1 секунду. Я заметил, что вычисления времени, базирующиеся от System.currentTimeMillis (), имеют тенденцию быть или 0ms или ~30ms; я не думаю, что можно получить что-либо более точное, чем это. Можно хотеть испытать System.nanoTime (), если действительно необходимо измерить маленький временной интервал:

6
ответ дан Community 24 November 2019 в 12:25
поделиться

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

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

, Когда Вы хотите на самом деле решить проблемы, однако, профилировщик может быть действительно услужливым.

5
ответ дан Hearen 24 November 2019 в 12:25
поделиться

Секундомер является на самом деле лучшим сравнительным тестом!

реальное вплотную пользовательское время отклика является временем, когда на самом деле имеет значение.

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

инструменты являются большими для автоматизированного тестирования, и для проблемы determinittion, но не теряют из виду то, что Вы действительно хотите измерить.

5
ответ дан Hearen 24 November 2019 в 12:25
поделиться

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

я также предлагаю, чтобы Вы использовали System.nanoTime(), поскольку это намного более точно. Если Ваше тестовое время составляет приблизительно 10 микросекунд или меньше, Вы не хотите называть это слишком часто, или оно может изменить Ваш результат. (например, Если я тестирую на, говорят 5 секунд, и я хочу знать, когда это произошло, я только получаю нановремя каждые 1 000 повторений, если я знаю, что повторение очень быстро)

4
ответ дан Hearen 24 November 2019 в 12:25
поделиться

, Как Вы обращаетесь к планированию операционной системы при сравнительном тестировании?

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

нет никакого смысла в высказывании, моя программа была бы быстрее, если бы только у меня не было ОС.

, Если Вы используете Linux, можно использовать инструменты такой в качестве numactl, chrt и taskset, чтобы управлять, как центральные процессоры используются и планирование.

2
ответ дан Hearen 24 November 2019 в 12:25
поделиться

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

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

1
ответ дан dkretz 24 November 2019 в 12:25
поделиться

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

2
ответ дан Hearen 24 November 2019 в 12:25
поделиться

Я думаю, что ключевым вопросом является сложность и отрезок времени операции.

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

Однако автоматизация, предоставленная вызовами любому виду системы часов на компьютере, как Java millis вызов, упомянутый в связанной статье, ясно превосходит вручную наблюдение, сколько времени что-то работает.

Профилировщики хороши, когда они работают, но у меня были проблемы при применении их к нашему приложению, которое обычно включает динамическую генерацию кода, динамическую загрузку DLLs и работу, выполненную в двух встроенных just-in-time-compiled языках сценариев моего приложения. Они довольно часто ограничены принятием единственного исходного языка и других нереалистичных ожиданий сложного программного обеспечения.

1
ответ дан jakobengblom2 24 November 2019 в 12:25
поделиться

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

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

1
ответ дан Hearen 24 November 2019 в 12:25
поделиться

Я не думаю, что сравнительное тестирование секундомера слишком ужасно, но если можно добраться на Солярис или машину OS X, необходимо проверить DTrace. Я использовал его для получения некоторой большой информации о синхронизации в моих приложениях.

0
ответ дан commondream 24 November 2019 в 12:25
поделиться

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

0
ответ дан sblundy 24 November 2019 в 12:25
поделиться

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

0
ответ дан Andrew Medico 24 November 2019 в 12:25
поделиться
Другие вопросы по тегам:

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