Есть ли методика для профильного тестирования приложения в изоляции? - PullRequest
2 голосов
/ 26 августа 2010

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

Ответы [ 3 ]

5 голосов
/ 26 августа 2010

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

EDIT

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

Получение «правильного результата» зависит от того, как вы интерпретируете данные профилирования. Например, если вы профилируете интерактивное приложение, вы должны выяснить, какие части профиля соответствуют ожиданию взаимодействия с пользователем, и игнорировать их.

Существует ряд проблем с профилированием вашего приложения по частям. Например:

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

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

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

... я ищу технику

Грубо говоря, вы начинаете с самых больших «горячих точек», определенных данными профиля, и углубляетесь до тех пор, пока не выясните , почему столько тратится в определенной области. Это действительно помогает, если ваш инструмент профилирования может агрегировать и представлять данные сверху вниз и снизу вверх.

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

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

2 голосов
/ 26 августа 2010

Сначала я просто измеряю время часами, чтобы получить общее измерение.

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

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

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

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

P.S. Если это интерактивное приложение, делайте все это только с медленной его частью, например, если вы нажмете кнопку «Do Useful Stuff», и она завершится через несколько секунд. Там нет смысла делать стеки выстрелы, когда он ждет вас.

P.P.S. Предположим, что есть какое-то действие, которое должно быть быстрее, но заканчивается слишком быстро, чтобы делать стеки, например, если это занимает секунду, но должно занимать долю секунды. Тогда вы можете (временно) обернуть вокруг него цикл для из 10 или 100 итераций. Это займет достаточно много времени, чтобы получить образцы. После того, как вы ускорили его, удалите петлю.

0 голосов
/ 26 августа 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...