2010-02-05 2 views
1

나는 중첩 된 NSArray 문자열을 가진 Iphone 앱을 가지고있다. NSArray는 3 단계로 깊게 진행되며 가장 깊은 단계에는 총 약 15,000 개의 문자열이 있습니다. 대다수의 문자열은 20 자 미만입니다. 가끔씩 내 앱이 잠시 멈추고 5 ~ 25 초 후 다시 시작됩니다. 이것은 분명히 받아 들일 수 없다. 문자열을 2,000 개만 사용하여 응용 프로그램을 실행하면 중단이 훨씬 더 희박 해집니다. 그래서 큰 NSArray가 문제를 일으키는 것이 확실합니다.iphone large NSArray string performance woes

더 효과적인 대체 데이터 구조는 무엇입니까? 필요한 것은 앱이 시작될 때 파일에서 배열을 빠르게 읽은 다음 배열에서 무작위로 문자열에 액세스 할 수 있어야합니다. [실제로는 그것보다 조금 복잡합니다. 배열의 사전 결정된 하위 집합에서 임의의 문자열을 가져올 수 있어야합니다. 프로그램에서 임의의 문자열을 한 번에 한 번씩 가져올 수 있습니다.

덧붙여서 NSArray는 현재 싱글 톤 클래스에 저장되어 있습니다. 다른 데이터 구조 (트라이)이 마음에 와서 않습니다

+0

전화가 끊어진 원인을 조사해야합니다. 이 물건들을 어떻게 요구하고 있습니까? 스트레이트 인덱싱 ('objectAtIndex :')이 세 번 있으면 20 초 동안 대기해야 할 이유가 없습니다. –

+0

제 문제 중 일부는 도구를 실제로 이해하지 못한다는 것입니다. 나는 상어와 함께 프로파일을 만들었고 내 CPU의 90 % 이상이 PID # 0에 의해 사용되고 있다고 말했다. 그러나 나는 PID # 0이 무엇인지 전혀 모른다. –

답변

1

있지만, 실제 질문은 다음과 같습니다

(1)이 있거나 당신은이 중단

과-necessarily-하지와시 인스트루먼트 프로파일 할 수 있습니다 어레이가 사용자의 문제라고 가정하십시오.

(2) 어레이에서 수행중인 조작은 무엇입니까?

선택의 여지가 없으면 성능 문제의 원인을 추측하고 싶지 않습니다. 측정하고 싶습니다. 그러나 당신이 나를 추측하게 만들었다면 ... 당신이 추억을 꽉 채우고 있는지, 그리고 시스템이 메모리 부족 경고와 물건 정리 작업을하는 경우인지 궁금합니다.

+0

내가 누출하지 않는다는 것을 안다. 객체 할당은 분당 최대 약 10MB까지 가능합니다. 그 외에도 악기의 어떤 부분이 유용한 정보를 줄 수 있습니까? –

+0

시간 프로필러. 그것이 멈출 때 무엇을 하는가? – Ken

+0

내가 할 수도 있기 때문에 나는 모르지만, 나는 아이팟 터치를 프로파일 링하기 위해 시간 프로파일 러를 얻을 수 없다. 항상 회색으로 표시됩니다. 상어 아래에서 프로필을 만들었으며 90 % + PID # 0이었습니다. 하지만 나는 PID # 0도 알지 못합니다. –

2

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

정말 정말 데이터베이스에 저장하고 필요에 따라 액세스해야합니다. 핵심 데이터는 지속되는 대형 객체 그래프에 맞추어 맞춤형이며, 관심있는 부분을 신속하게 찾아내는 동시에 장면을 캐시합니다.

계측기의 경우 시스템이 모든 시간을 소비하는 곳, 가급적이면 장치 자체에서 시간 프로필러를 사용하는 것이 좋습니다. 예를 들어 (장기간의 일시 정지가 표시 인 것처럼 보이는) 객체 자동 갱신에 많은 시간을 할애 할 수 있습니다. 이는 배열의 많은 부분을 끊임없이 제거하는 것과 같습니다.

+0

나는 "테이블에"무슨 뜻인지 모르겠다. 그들은 메모리에로드되는 NSArray에 있습니다. 이게 내 문제 일 수 있다고 말하는거야? –

+0

나는 그것이 당신의 문제이거나, 적어도 좋은 생각이 아니라고 확신합니다. - "테이블 안에서"나는 사실 모든 것을 한 번에 하나의 UITable에 사용자에게 표시한다는 것을 의미합니다.그게 내게는별로 보이지 않는데, 사용자에게 10k 항목이있는 표를 스크롤하여 표시합니다. 한 번에 모든 것을 보여주지는 않을 것이므로 데이터베이스에 보관하면 더 의미가 있습니다. –

+0

이것은 약 350KB의 저장 공간만을 차지하므로이 정도의 메모리만으로는 미친 것처럼 보이지 않습니다. 나는 네가 뭘하고 있는지에 달려 있다고 생각해. – Ken