我正在将旧的大型sqlite数据库转换为核心数据,现在我面临内存问题。
-(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%,并且在第一分钟后内存消耗大约为108.1 MB。
最后,Xcode抛出了我:
CoreData:错误:(21)/ Users / ia / Library / Application Support / iPhone Simulator / 7.0.3 / Applications / C5CCADE1-9FDD-4A03-BC44-FAD1C16DB0EF / Documents / Catalog /中数据库的I / O错误wci.sqlite。 SQLite错误代码:21,“无法打开数据库文件”
坦率地说,我在代码中找不到瑕疵。最近,我写了类似的方法,插入20000个对象后内存约为50MB。有帮助吗?提前谢谢
答案 0 :(得分:0)
[thisContext setUndoManager:nil]; 这是捕获线。 UndoManager需要大量内存。插入时不需要撤消管理器,将其设置为null会减少内存+在很大程度上增加插入。