코어 데이터에 수백 MB 파일 세트를로드 중입니다. 관계형 조인을 사용하는 대신 NSDictionaries/NSArray를 생성하고 Core Data 레코드에 직렬화함으로써 성능이 훨씬 향상되었음을 발견했습니다. 내가 루프 (파일 당이 약 70K에서 완전히 나는 경우가 정리됩니다코어 데이터에서 ARC를 통해 JSON (NSData로) JSON을 저장할 때
NSMutableDictionary *stackEntryDictionary = [NSMutableDictionary dictionary];
NSDictionary *stackDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
[NSString stringWithUTF8String:parts[6].c_str()], @"relationship"
, [NSString stringWithUTF8String:parts[8].c_str()], @"sequenceId"
, [NSString stringWithUTF8String:parts[9].c_str()], @"sequence"
, [NSString stringWithUTF8String:parts[7].c_str()], @"block"
, [NSNumber numberWithInteger:row], @"entryId"
, nil ];
if ([relationship isEqualToString:@"consensus"] || [relationship isEqualToString:@"model"]) {
[stackEntryDictionary setObject:stackDictionary forKey:relationship];
row = 1;
}
else {
[stackEntryDictionary setObject:stackDictionary forKey:[NSNumber numberWithInt:row].stringValue];
++row;
}
stackEntryDatumMO = [NSEntityDescription insertNewObjectForEntityForName:@"StackEntryDatum" inManagedObjectContext:document.managedObjectContext];
stackEntryDatumMO.sampleId = sampleMO.sampleId;
stackEntryDatumMO.name = sampleMO.name;
stackEntryDatumMO.tagId = [NSNumber numberWithInteger:locusId];
// THIS IS THE "BAD LINE" that issues a lot of NSString malloc's
stackEntryDatumMO.stackData = [NSJSONSerialization dataWithJSONObject:stackEntryDictionary options:0 error:&error];
를 들어, 내 메모리 풋 프린트 지붕으로 인해 구약의 malloc의이 라인에 기인 통과 taht를 문제는 지금까지입니다 30 개 파일이며, 삽입 사전의 평균 크기는 약 20입니다. 그러나 응용 프로그램 성능을 저하시키고 불필요한 약 10GB의 메모리를 사용하고 있습니다.
그래서 두 가지 질문이 있습니다. 1 - 어떻게 핵심 데이터에 개체를 포함시킬 것을 제안합니까 (또는 제안 하시겠습니까?). 2 - 더 적은 메모리 풋 프린트를 제공하는 더 우수한 JSON 직렬화 라이브러리가 있습니까? 3 - ARC를 포기해야합니까? 그렇다면 어떻게해야합니까? 4 - 다른 제안 사항이 있으십니까? 별도의 가져 오기 "응용 프로그램"을 사용하는 것이 임시 대체 솔루션이 될 수 있지만, 장기간 App-Store에 게시 된 것을 볼 수는 없습니다.
로드 후 ARC가 정리되면 이미 릴리스 된 객체를 릴리스하려고 시도 할 때 응용 프로그램이 종료됩니다 (필요한 경우 나중에 오류를 게시 할 수 있음). 이것은 작은 파일에는 발생하지 않습니다.
'@ autoreleasepool'을 사용하십시오. –
예, dataWithJSONObject 호출 주위에 자동 회수 풀을 넣으십시오. (stackData가 "강력 함"이라고 가정합니다.) –