2012-07-15 4 views
1

내 앱 시작 시간 (현재 Guice 바인딩 속도가 느려서 ~ 5 초)을 가속화하려고하는데 traceview를 실행하면 실행 결과에서 매우 큰 변화 (30 % 정도 높음)가 발생합니다. 같은 코드.왜 traceview는 일관성없는 측정을합니까?

나는 이것이 가비지 컬렉션의 차이점이라고 가정하지만, startGC에서 보내는 시간은 완전히 중요하지 않습니다.

측정이 너무 가변적 일 때 내 최적화의 효과가 무엇인지 판단하기가 어렵 기 때문에 이것은 특히 심각합니다.

왜 이런 일이 발생합니까? 측정을보다 일관성있게하는 방법이 있습니까?

답변

0

코드를 수동으로 켜기보다는 프로파일 링을 시작한다고 가정 해 보겠습니다. 하지만 코드의 특정 지점에서 Debug.startMethodTracingDebug.stopMethodTracing을 사용한다고해도 다른 측정 값을 받게됩니다.

here Traceview는 JIT를 사용할 수 없으며 일부 다른 최적화는 사용자의 코드를 프로파일 링하는 동안 코드가 실행되는 것보다 느리게 실행된다는 것을 알 수 있습니다. 또한 코드 성능은 전체 시스템 부하에 따라 다릅니다. 다른 앱이 백그라운드에서 과중한 작업을하는 경우 코드가 더 오래 실행됩니다. 따라서 약간 다른 결과를 얻고 시작 시간은 일정하지 않을 수 있습니다.

일반적으로 메서드 실행 시간은 중요하지 않지만 다른 방법과 비교할 때 CPU 시간이 얼마나 소요되는지는 중요하지 않습니다.

+0

나는 유일한 측정 기준 인 traceview가 제공하는 CPU 시간을 측정하는 것에 대해 이야기하고 있습니다.나는 프로파일 링을위한 동기 부여에 대한 소개로 5 초 시작 시간 (프로파일 링을 사용하지 않는 스톱워치로 측정)에 대한 언급에 혼란 스러웠을 것입니다. 그렇다면 합리적인 일관성으로 시작시에 소비되는 CPU 시간을 어떻게 측정합니까? 그리고 네,'Debug.start/stopMethodTracing'을 사용하고 있습니다 –

+0

이미 가지고있는 것보다 더 일관성을 유지하는 것이 불가능하다고 생각합니다. 초기화 프로세스에서 데이터를 읽는 데 일부 IO 기능을 사용하는 경우 이미 일관성이 없습니다. 또한 귀하의 코드가 별도의 스레드에서 실행되고 있다고 가정합니다. 단일 프로세서 시스템에서 실행중인 경우 프로파일 링 결과는 시스템 스레드 스케줄러에 따라 달라질 수 있습니다. 왜냐하면 실제 코드는이 모든 시간을 지속적으로 실행하지 않기 때문입니다. 나는 다른 발사에서 완전히 동일한 흔적을 얻을 수 없다는 것을 확신합니다. –

0

측정과 같은 사운드는 궁극적 인 목표가 아닙니다. 궁극적 인 목표는 그것을 더 빨리 만드는 것입니다.

이렇게하는 방법은 어떤 활동이 많은 시간을 차지하고 있는지 파악하여 더 나은 방법을 찾을 수 있습니다. "측정"이 아니라 "발견"이라고 말했고, "일상"이 아니라 "활동"이라고 말했습니다.

이렇게하려면 프로그램의 상태를 샘플링하기 만하면됩니다. 많은 프로파일 러는 프로그램 상태의 많은 샘플을 수집하지만, 모두 동일한 논리에 속합니다. 즉, 이론에 따라 원하는 것은 모두 측정이며 사용자는 무엇을 신경 쓰지 않습니다.

요약하면 샘플을 자세히 살펴볼 수있는 요약본을받는 것이 아니라 프로그램이 시간을 보내는 방법에 대해 많은 것을 알려줍니다.

2 개 정도의 샘플만으로도 목표를 추구하는 프로그램을 볼 수 있었고 크게 향상시킬 수 있다면 상당한 속도 향상을 볼 수 있습니다. 이 과정은 여러 번 반복 할 수 있습니다. 그러면 은 정말입니다.

과정은 here으로 자세히 설명되어 있으며 사용 사례는 here입니다.

+0

흥미 롭군요.하지만 내가 뭔가를 놓치지 않으면 그 질문에 대답하는 데 도움이되지 않습니다. Traceview는 이미 완전히 결정론적인 메소드 호출 수와 계층 구조를 제공합니다. –

+0

@ Jeff : 1) 타이밍 측정의 일관성을 기대하지 마십시오. 통제 할 수없는 요인이 너무 많아서 어쨌든 중요하지 않습니다. 2) 호출 횟수 및 계층 구조와 관련하여 [* here *] (http://stackoverflow.com/a/1779343/23771) 문제를 확인하십시오. 그것은 당신에게 당신이 알 필요가있는 모든 것을 말하고있는 것처럼 보일 수 있지만, 그렇지 않습니다. –

관련 문제