Ios 面向大数据的CoreData优化
块内的获取请求需要大约9分钟的时间来处理instrument customerArray上的checked对象,而CustomerAddress模型中的对象约为60K,因此我这次必须进行优化Ios 面向大数据的CoreData优化,ios,iphone,xcode,core-data,Ios,Iphone,Xcode,Core Data,块内的获取请求需要大约9分钟的时间来处理instrument customerArray上的checked对象,而CustomerAddress模型中的对象约为60K,因此我这次必须进行优化 NSArray *customerArray=[engine getItemsForEntity:@"CusCustomer" predicate:nil error:nil]; NSPredicate *predicate = [NSPredicate predicateWithFo
NSArray *customerArray=[engine getItemsForEntity:@"CusCustomer" predicate:nil error:nil];
NSPredicate *predicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"id1 == $idVar"]];
NSPredicate *predicateCustomerAddress = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"customerId == $customerIdVar AND addressType == $addressTypeVar"]];
[customerArray enumerateObjectsUsingBlock:^(CusCustomer *customer, NSUInteger idx, BOOL *stop) {
NSString *customerId=customer.id1;
NSString *addressType = ShippingAddress;
NSDictionary *variablesAddress = @{ @"customerIdVar" : customerId , @"addressTypeVar" : addressType};
NSArray *resultAddress = [engine getItemsForEntity:@"CusCustomerAddress" predicate:[predicateCustomerAddress predicateWithSubstitutionVariables:variablesAddress] error:nil];
if (resultAddress.count == 1 ) {
[customer addCustomerAddressObject:(CusCustomerAddress *)[resultAddress lastObject]];
}
else
{
DLogHp(@"More than one tuple Exist For this'id1' =\"%@\" in \"CusCustomerGroup\"",objId);
}
addressType = BillingAddress;
NSDictionary *variablesAddress1 = @{ @"customerIdVar" : customerId , @"addressTypeVar" : addressType};
NSArray *resultaddress1 = [engine getItemsForEntity:@"CusCustomerAddress" predicate:[predicateCustomerAddress predicateWithSubstitutionVariables:variablesAddress1] error:nil];
if (resultaddress1.count == 1 ) {
[customer addCustomerAddressObject:(CusCustomerAddress *)[resultaddress1 lastObject]];
}
else
{
DLogHp(@"More than one tuple Exist For this'id1' =\"%@\" in \"CusCustomerGroup\"",objId);
}
}];
}
这可能是从核心数据(或任何数据库)检索数据的最昂贵的方法。您实际上是在创建N个回迁,而不是构建一个查询 考虑将您的逻辑更改为:
- 如果一个方法返回
你不需要强制转换它。强制转换只会增加噪声,移除它id
- 您的变量名称很粗糙。我建议删除“Var”,因为它是多余的
- 考虑分批获取,因为此过程将导致一些严重的内存问题。无论发生什么情况,60K记录都将非常昂贵
- 执行谓词时,从便宜到昂贵。现在谓词中有字符串比较。这是最昂贵的。如果可以更改数据模型,请将地址类型更改为整数。数字比较要便宜得多
- 如果一个方法返回
你不需要强制转换它。强制转换只会增加噪声,移除它id
- 您的变量名称很粗糙。我建议删除“Var”,因为它是多余的
- 考虑分批获取,因为此过程将导致一些严重的内存问题。无论发生什么情况,60K记录都将非常昂贵
- 执行谓词时,从便宜到昂贵。现在谓词中有字符串比较。这是最昂贵的。如果可以更改数据模型,请将地址类型更改为整数。数字比较要便宜得多
NSFetchedResultsController
用于视图,这是数据处理,NSFetchedResultsController
不会解决任何问题。哇,您想做什么?如果您正在显示此数据,请使用NSFetchedResultsController。一个NSFetchedResultsController
用于查看,这是数据处理,NSFetchedResultsController
无法解决任何问题。谢谢Marcus S.Zarra我需要一个了解更多问题的人请查看。谢谢Marcus S.Zarra我需要一个了解更多问题的人请查看。