2012-10-21 6 views
5

인스트루먼트의 타임 프로파일 러를 사용하여 특정 작업을 향상시키는 방법에 대한 조언을 찾고 있습니다. 요구에 따라 내용을로드하는 페이징 스크롤보기가 있습니다. 새 페이지가 스크롤되면서 다른 페이지가 오른쪽으로 두 페이지가로드됩니다. 이것은 현재 페이지가 화면의 50 %로 스크롤 될 때 발생하며 느린 장치에서는 병목이 충분하기 때문에 스크롤의 매끄러움을 방해합니다. 두루마리는 50 % 파인트에서 아주 잠시 멈추고 다시 행동으로 돌아 오는 느낌입니다.인스트루먼트를 사용한 벤치마킹 성능

내 응용 프로그램에는 네트워크 구성 요소가 없으므로 병목 목은 데이터를 가져 오는 동안 그렇지 않다는 점에 유의해야합니다. 모든 것이 새로운보기로드에 있습니다.

개선 작업을 진행하면서 개선 사항의 효과를 평가할 수 있도록 전환점을 벤치마킹해야합니다. WWDC 세션을 보았을 때, 나는 시간 프로파일 러의 기본을 이해하지만, 나는 옳은 것을보고있다.

저는 악기를 실행하고 나서 스크롤을 실행하고 있습니다. 나는 CPU 활동에 예상되는 스파이크를 본다. 나는 스파이크를 선택하고 심볼 이름을보고있다. 아래에서 볼 수 있듯이 시스템 라이브러리를 숨기고 Obj-C를 표시 할 때 실행 시간이 81.0 ms 인 간단한 90 % 스파이크를 처리하고 있습니다. 나는 내 코드로 드릴 다운 할 때

enter image description here

내 혼란이 온다. 가장 큰 공헌자 중 한 명 (23ms)은 sortedArrayUsingDescriptors을 사용하는 작은 루틴입니다. 그 중 하나에 대해서는별로 할 수 없습니다. 다른 경우 CGRectInset을 사용하는 근본 원인은 몇 밀리 초입니다. 나는 이미지 사용이나 이와 비슷한 것을 더 많이 볼 것으로 예상했다.

내가 올바른 일을 벤치마킹하는지는 잘 모르겠다. 나는 정말로 6ms 작업을 5ms로 줄이고 차이를 볼 것을 기대하고 있었습니까? 내 문제를 진단 할 올바른 도구를보고 있습니까?

무엇을 측정하고 내 노력에 초점을 맞출 지에 대한 조언이나 지침은 실제로 가치가있을 것입니다.

+0

배열 정렬에 시간이 걸리면 바로 그 부분에 집중해야합니다. 그런데 배열을 정렬하는 이유는 무엇입니까? 미리 분류 될 수 있습니까? 그것은 배열이어야합니까? – jrturton

+1

그리고 악기가 사용하는 한 당신이 옳은 일을하고있는 것처럼 보입니다. 그 방법과 cellForRowAtIndexPath는 대부분의 시간이 가고있는 것 같습니다. 두 번 클릭하여 소스 코드의 실제 핫스팟을 표시합니다. – jrturton

+0

감사합니다. 핵심 데이터 클래스에 일련의 항목이 있습니다. 편의상 orderedItems 메서드를 해당 클래스에 추가했습니다. 예를 들어 셀의 텍스트가 필요할 때 orderedItems를 사용하여 올바른 항목을 찾습니다. 어쩌면 클래스에 이것을 캐싱하고 항목이 변경 될 때마다 업데이트하는 방법으로 몇 밀리미터를 면도 할 수 있습니다. –

답변

1

백그라운드 스레드에서 가능한 한 많은 비 UI 작업 (페치, 정렬, 선택 등)을 수행하려면 그랜드 센트럴 디스패치를 ​​사용해보십시오. 이것은 multi-cpu 기계의 힘을 레버리지하고 주 스레드에서 당신을 빨리 빠져 나올 것입니다. 필요한 경우 주 스레드 만 사용하여 작업합니다.