내 응용 프로그램이 웹 서비스를 사용해야하고 json에서 일부 데이터를 가져와야합니다. json을 구문 분석하고 내 영구성 저장소의 데이터를 피드해야합니다. 실제 장치에서 내 응용 프로그램을 테스트 할 때까지 모든 것이 훌륭하게 작동했습니다. 응용 프로그램은 좌절감을 느낄 때까지 기다렸다가 마침내 내 얼굴에 구멍을 뚫습니다. 여기 X- (핵심 데이터 장치의 성능 문제
I 1000 번 결합 주위 I이 조작을해야 insertOrReplaceObjectForEntityForName 여기
+(id) insertOrReplaceObjectForEntityForName:(NSString *)entityName inManagedObjectContext:_context WithPredicateString:(NSString *)predicateString, ...{
NSManagedObject *object;
va_list ap;
va_start(ap, predicateString);
NSFetchRequest *req = [[NSFetchRequest alloc] initWithEntityName:entityName];
NSPredicate *pred = [NSPredicate predicateWithFormat:predicateString arguments:ap];
[req setPredicate:pred];
int count = [_context countForFetchRequest:req error:nil];
if(count > 0){
NSArray *arr = [_context executeFetchRequest:req error:nil];
object = [arr objectAtIndex:0];
}
else{
object = [NSEntityDescription insertNewObjectForEntityForName:entityName inManagedObjectContext:_context];
}
va_end(ap);
return object;
}
한 줄의 간단한 조작으로이 약 0.004 초 복용 및 데이터를 파싱하는 방법을 많은 다른 작업들로 인해 구문 분석이 너무 많이 진행됩니다. 이미 기본 데이터베이스에 많은 마약이 있고 마약이 존재하는지 확인해야합니다. sts 나는 그것의 가치를 편집해야합니다.
Drug *drug = [NSEntityDescription insertOrReplaceObjectForEntityForName:@"Drug" inManagedObjectContext:parsingContext WithPredicateString:[NSString stringWithFormat:@"drugId == '%@'",[drugDetails objectForKey:@"DrugId"]]];
나는 응용 프로그램에서 유지 관리 이력을 유지하기 위해 핵심 데이터를 사용했지만, 지금은 내가 여기에 누군가가 나를 도울 수 없다면, 핵심 데이터에서 벗어나 역사를 유지 잊어해야합니다 생각합니다. 나는 이미 내 응용 프로그램을 만드는 데 많은 시간을 보냈으며 이제 클라이언트가 내 다리를 치고있다, 어떤 제안 ??
1000은 핵심 데이터입니다. 카운트를 건너 뛰십시오. '[_context executeFetchRequest : req error : nil];'이 0 개체를 반환하면 카운트 작업이 필요 없습니다. 다른 작업은 한 번에 20 개의 약물 ID를 묶어서 가져 오기 횟수를 줄이는 것입니다. 마지막으로이 모든 것이 백그라운드 대기열에서 발생하는지 확인하십시오. – amattn
백그라운드 큐 등을 돌 보았습니다.하지만 문제는 가져 오기가 많은 시간을 들여서 많은 주름으로 성능을 저하시키고 있다는 것입니다. –
한번에 모든 레코드를 가져오고 filteredArrayUsingPredicate 메소드를 사용하는 것이 더 빠르다고 생각합니까? –