Я пытаюсь ускорить время запуска своего приложения (в настоящее время ~ 5 секунд из-за медленной привязки Guice), и когда я запускаю traceview, я вижу довольно большие вариации (до 30%) в измерениях от выполнения тех же код.
Я бы предположил, что это из-за различий в сборке мусора, но время, потраченное в startGC
соответствии с трассировкой, совершенно незначителен.
Это особенно усугубляет ситуацию, потому что очень сложно определить, какие эффекты были для моих оптимизаций, когда измерения настолько переменны.
Почему это происходит? Есть ли способ сделать измерения более последовательными?
Если вы выполняете какую-либо деятельность, связанную с сетью при запуске, этот инструмент может помочь вам понять, что происходит и как вы можете оптимизировать соединения и кеширование. http://developer.att.com/developer/legalAgreementPage.jsp?passedItemId=9700312
Похоже, что измерение - это не ваша конечная цель. Ваша конечная цель - сделать это быстрее.
Способ сделать это - найти, какие виды деятельности составляют значительную часть времени, поэтому вы можете найти лучший способ их выполнения. Я сказал "нахождение", а не "измерение", и я сказал "деятельность", а не "подпрограммы".
Для этого необходимо только просмотреть состояние программы. Многие профилографы собирают большое количество образцов состояния программы, но тогда все они попадают в одну и ту же логику - они суммируют, по теории, что все, что вам нужно, это измерения, и вам на самом деле все равно.
На самом деле, если вы не можете получить резюме, вы можете подробно изучить некоторые образцы, это расскажет вам гораздо больше о том, как программа тратит свое время.
Что еще, если всего на двух (2) образцах вы могли видеть, что программа преследует какую-то цель, и вы могли бы значительно улучшить ситуацию, вы увидите значительное ускорение. Этот процесс можно повторить несколько раз и как вы можете его оптимизировать.
Процесс объясняется более подробно здесь есть и вариант использования здесь.
Я полагаю, вы начинаете профилирование из кода, а не вручную его вручную? Но в любом случае, даже если вы используете Debug.startMethodTracing
и Debug.stopMethodTracing
из определенной точки вашего кода, вы получите различные измерения.
Вы можете видеть здесь, что Traceview отключает JIT, и я верю в некоторые другие оптимизации, поэтому при профилировании ваш код выполняется медленнее, чем без него. Кроме того, производительность вашего кода зависит от общей загрузки системы. Если какое-либо другое приложение выполняет тяжелую операцию в фоновом режиме, ваш код будет работать дольше. Таким образом, вы должны определенно получить результаты, которые немного отличаются и поэтому время запуска не может быть постоянным.
Как правило, не так важно, как долго длится ваш метод, но сколько процессорного времени он потребляет по сравнению с другими методами.
Debug.start/stopMethodTracing