문제

나는 크고 중첩 된 nsarray의 줄이있는 iPhone 앱이 있습니다. NSARRAY는 3 단계 깊이로 이동하며 가장 깊은 레벨에서 총 15,000 개의 문자열이 있습니다. 줄의 대부분은 20 자 미만입니다. 종종 내 앱은 잠시 동안 매달려 5-25 초 후에 작동합니다. 이것은 분명히 용납 할 수 없습니다. 문자열의 2,000만으로 앱을 실행하면 교수형이 훨씬 드물어집니다. 그래서 나는 큰 nsarray가 문제를 일으키고 있다고 확신합니다.

어떤 대체 데이터 구조가 더 잘 작동할까요? 앱이 시작될 때 파일에서 배열을 빠르게 읽은 다음 배열에서 무작위로 문자열에 액세스 할 수 있습니다. [실제로는 그보다 조금 더 복잡합니다. 배열의 미리 결정된 하위 집합에서 임의의 문자열을 잡을 수 있어야합니다.] 프로그램은 자주 1 초 만에 임의의 문자열을 가져올 수 있습니다.

또한 NSARRAY는 현재 싱글 톤 클래스에 저장되어 있습니다.

도움이 되었습니까?

해결책

다른 데이터 구조 (TRIE)가 떠오르지 만 실제 질문은 다음과 같습니다.

(1)이 교수형 중에 악기로 프로필을받을 수 있습니까?

그리고 어레이가 당신의 문제라고 생각하지 않음으로써

(2) 배열에서 어떤 작업을 수행하고 있습니까?

선택의 여지가 없다면 성능 문제의 원인에 대해 추측하고 싶지 않습니다. 그러나 만약 당신이 나를 추측하게했다면 ... 당신이 메모리에서 꽉 짜는 지 궁금해하고, 행진이 낮은 메모리 경고와 청소를하는 시스템인지 궁금합니다.

다른 팁

그 많은 줄을 사용하면 한 번에 테이블에있는 방법이 없습니다 (오른쪽 ???).

당신은 정말로, 그것들을 데이터베이스에 넣고 주문형에 액세스해야합니다. 핵심 데이터는 큰 객체 그래프를 지속시키고 신경 쓰는 부분을 빠르게 꺼내는 반면, 무대 뒤에서 물건을 캐시 할 수 있도록 조정됩니다.

악기는 시간 프로파일 러를 사용하여 시스템이 모든 시간, 바람직하게는 장치 자체에서 어디에 있는지 확인하고 싶습니다. 예를 들어 객체를 자동 제외시키는 데 매우 많은 시간이 소비 될 수 있습니다 (예 : 긴 임의의 일시 정지는의 징후가 될 것입니다) - 이는 배열의 많은 부분을 지속적으로 제거하는 것과 일치합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top