내 앱 시작 시간 (현재 Guice 바인딩 속도가 느려서 ~ 5 초)을 가속화하려고하는데 traceview를 실행하면 실행 결과에서 매우 큰 변화 (30 % 정도 높음)가 발생합니다. 같은 코드.왜 traceview는 일관성없는 측정을합니까?
나는 이것이 가비지 컬렉션의 차이점이라고 가정하지만, startGC
에서 보내는 시간은 완전히 중요하지 않습니다.
측정이 너무 가변적 일 때 내 최적화의 효과가 무엇인지 판단하기가 어렵 기 때문에 이것은 특히 심각합니다.
왜 이런 일이 발생합니까? 측정을보다 일관성있게하는 방법이 있습니까?
나는 유일한 측정 기준 인 traceview가 제공하는 CPU 시간을 측정하는 것에 대해 이야기하고 있습니다.나는 프로파일 링을위한 동기 부여에 대한 소개로 5 초 시작 시간 (프로파일 링을 사용하지 않는 스톱워치로 측정)에 대한 언급에 혼란 스러웠을 것입니다. 그렇다면 합리적인 일관성으로 시작시에 소비되는 CPU 시간을 어떻게 측정합니까? 그리고 네,'Debug.start/stopMethodTracing'을 사용하고 있습니다 –
이미 가지고있는 것보다 더 일관성을 유지하는 것이 불가능하다고 생각합니다. 초기화 프로세스에서 데이터를 읽는 데 일부 IO 기능을 사용하는 경우 이미 일관성이 없습니다. 또한 귀하의 코드가 별도의 스레드에서 실행되고 있다고 가정합니다. 단일 프로세서 시스템에서 실행중인 경우 프로파일 링 결과는 시스템 스레드 스케줄러에 따라 달라질 수 있습니다. 왜냐하면 실제 코드는이 모든 시간을 지속적으로 실행하지 않기 때문입니다. 나는 다른 발사에서 완전히 동일한 흔적을 얻을 수 없다는 것을 확신합니다. –