2010-06-07 7 views
3

저는이 문제를 잠시 동안 사용 해왔고 모범 사례/조언을 공개합니다.핵심 데이터 및 성능 저하

는 예

그래서 나는 샘플 코어 데이터 응용 프로그램을 만들었습니다. 이 응용 프로그램은 기본적으로 AddressBook 응용 프로그램을 모방 한 것입니다. 그룹, 연락처, 주소, 전화, 이메일, 웹 페이지, 날짜 등 다음과 같은 엔티티가 있습니다.

아마도 추측 하듯이 그룹에는 여러 개의 주소록이있을 수 있으며 주소록은 여러 그룹에 속할 수 있습니다. 주소록에는 여러 개의 주소, 전화, 이메일, 웹 페이지 및 날짜가있을 수 있습니다.

기본적으로 AddressBook에서이 애플리케이션에 약 600 개의 연락처를 가져 왔습니다. 사용자 인터페이스는 비교적 간단합니다 ... 왼쪽에 Group/category 목록이 있고 오른쪽에 NSCollectionView 또는 NSTableView가 있습니다. 선택한 그룹에 따라 연락처 목록이 표시됩니다 (컬렉션보기 또는 테이블보기 ... 추가 한대로). 어느 쪽이든 NSArrayController에 바인딩 된 뷰를 표시하는 기능)

그룹 요소 인터페이스 빌더와는 달리 코드를 통해 가져 오는 그룹 요소입니다. 왜냐하면 저는 사이드 바 같은 사이드 바를 가지고 놀고 싶었 기 때문에 이렇게하는 것이 훨씬 쉽습니다. 다른 종류는 단지 2 접점을 포함하면서 카테고리

문제점

하나는 모든 연락처를 포함한다. 모든 연락처가있는 범주를 선택하면 정보가 컬렉션 또는 테이블 뷰에 채워지는 데 8-10 초가 소요됩니다. 그러나 AddressBook 자체에서 똑같은 일을하는 것은 매우 빠르고 즉각적입니다. SQLLite 저장소 유형을 사용하고 있으며 Instruments를 통해 문제를 진단하는 것을 포함하여 다양한 접근 방식을 사용하여 시도했지만 아무것도 작동하지 않았습니다.

필터 조건자를 설정하는 대신 컨택의 배열 컨트롤러의 defaultFetchPredicate에 조건자를 설정해 보았지만 작동하지 않았습니다.

프리 페칭 및 폴링을 시도했지만 인터페이스 작성기가 연락처의 NSArrayController를 처리하는 경우 올바르게 수행하는지 확실하지 않습니다.

다른 예 나는 또한 샘플 코어 데이터 응용 프로그램을 다운로드 시도했습니다

... 그것은 내가 한 것보다 더 간단한 관계 모델 (기본적으로 분자가 가지고 아톰 개체가와 아톰 개체가 가지고있는 동안 Element 객체), 65,000 개의 레코드를 삽입했으며 매력처럼 수행했습니다.

[질문

나는 기본적으로 벽에 충돌했고 다른 사람이 이런 일이 왜 알고/수정 극복/이러한 유형의 문제를 방지하는 가장 좋은 방법 만약 내가 궁금하네요?

감사합니다.

+0

관련 항목을 10 또는 20 개의 청크로 선택하고 처음 10-20이 표시된 후 백그라운드에서 비동기로 계속 진행할 수도 있습니다. – Nate

+1

Instruments.app와 친구를 사귀십시오. 모든 성능 질문과 마찬가지로 모든 대답은 성능 데이터가 있기 전까지는 가장 추측에 가깝습니다. 핵심 데이터 인출, 캐시 미스 및 전반적인 객체 할당에 특히주의하십시오. –

+0

필자는 생각보다 많은 가져 오기가 있음을 알았습니다. 예를 들어 앱이 처음 시작될 때 Contact 객체를 여러 번 가져 오는 것처럼 보입니다. 문자 그대로 abotu를 800 번 가져 오지만 페치 수가 1 인 것처럼 보입니다. 그런 다음 반품이 두 번 더 반환됩니다 두 번 모두 적절한 양의 개체. 루프에서 그런 코드를 실행하지 않아서 기이하다. – Patrick

답변

1

NSCollectionView가 실제로 느려지는 것으로 나타났습니다. 나는 뷰 생성 및 조작 x 콜렉션 뷰 뷰의 수가 많은 오버 헤드를 추가한다고 생각합니다. IKImageBrowserView가 사용되었을 수 있지만 내가 찾고있는 것이 아닙니다.

이 문제를 해결하기 위해 응용 프로그램 레이아웃을 변경했습니다.

감사합니다.