2014-03-28 4 views
0

이전의 거대한 sqlite 데이터베이스를 핵심 데이터로 변환하고 있으며 이제는 메모리 문제가 있습니다. 나는이 방법을 실행하기 시작 동시에 iOS, 핵심 데이터 : 메모리 문제

-(void)linkCoinsToCoinagesInPeriods 
{ 
DBAccess *acc=[[DBAccess alloc]init]; 
NSFetchRequest *coinagesFetch=[NSFetchRequest fetchRequestWithEntityName:@"Coinage"]; 
NSArray *coinages=[_context executeFetchRequest:coinagesFetch error:nil]; // 2000+ items 

for(Coinage *coinage in coinages) 
{ 
    //retrieving different quantity of int objects less then 200 from database 

    NSMutableArray *coinsArr=[acc returnKMListFromCoinageCell:1 period:coinage.uID.intValue]; 

    for(dbType *obj in coinsArr) 
    { 
     NSFetchRequest *coinsFetch=[NSFetchRequest fetchRequestWithEntityName:@"Coin"]; 
     NSPredicate *predicate=[NSPredicate predicateWithFormat:@"uID=%@",[NSNumber numberWithInt:obj.kmID]]; 
     coinsFetch.predicate=predicate; 
     NSArray *coins=[_context executeFetchRequest:coinsFetch error:nil]; 
     for(Coin *coin in coins) 
     { 
      coin.coinage=coinage; 
      NSLog(@"Linked coin to coinage: %@ -> %@",coin.uID, coinage.name); 
     } 
     coinsFetch=nil; 
    } 
    coinsArr=nil; 
    [self saveContext]; 

} 
} 

내 프로세서는 97 %를 보여줍니다 및 메모리 소비는 첫 1 분 후 약 108.1 MB를 실행합니다.

마지막으로, 엑스 코드는 저를 던졌습니다 :

CoreData : 오류 : (21)/사용자/IA/라이브러리/응용 프로그램 지원/아이폰 시뮬레이터/7.0.3/응용 프로그램/C5CCADE1-9FDD에서 데이터베이스에 대한 I/O 오류 -4A03-BC44-FAD1C16DB0EF/문서/카탈로그/wci.sqlite. SQLite 오류 코드 : 21, '데이터베이스 파일을 열 수 없습니다'

솔직히 코드에서 결함을 찾을 수 없습니다. 최근에 비슷한 방법으로 썼고 20000 개의 객체를 삽입 한 후 약 50MB의 메모리를 사용했습니다. 어떤 도움이 필요합니까? 사전에

+0

http://stackoverflow.com/questions/18550873/ios-coredata-large-set-insert. 내 대답을 참고하고 도움이된다면 동의하십시오. –

+0

별로 도움이되지는 않지만, N 개의 삽입 후에 컨텍스트를 다시 설정하는 것이 좋습니다. 나는 당신의 대답을 받아 들일 것이지만, 먼저 여기에 답을 써야합니다. – NCFUSN

답변

0

ios Coredata large set insert

[thisContext setUndoManager을 : 전무] 감사합니다; 이것은 캐치 라인입니다. UndoManager는 많은 메모리를 필요로합니다. 삽입 할 때 관리자를 취소 할 필요가 없습니다. 이것을 null로 설정하면 메모리가 줄어들고 삽입 기능이 크게 증가합니다.

+0

감사합니다. UndoManager는이 경우 쓸모가 없습니다. – NCFUSN