如何缩短运算时间?从内存的角度

相奇 2012-12-05 06:03:28
读取 系统通讯录的时候,加载很慢。
代码如下:
/**write datas*/
- (void)generatePersonInfosFromAddressBook:(ABAddressBookRef)addressBook {

CFArrayRef persons = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFIndex nCounts = ABAddressBookGetPersonCount(addressBook);

//database
ILSCMPersistenceManage *pm = [ILSCMPersistenceManage sharedInstance];

for (int i = 0; i<nCounts; i++) {
ABRecordRef recordOfPerson = CFArrayGetValueAtIndex(persons, i);
ABContact *contact = [ABContact contactWithRecord:recordOfPerson];
ILSCMPersonInfo *personInfo = [ILSCMPersonInfo ABcontactCoventToPersonInfo:contact];

if (personInfo.recordID) {
NSString *regex = [NSString stringWithFormat:@"SELF.recordID == %d",[personInfo.recordID intValue]];
NSArray *result = [pm fetchEntity:kEntityPersonInfo criteria:regex variables:nil sortBy:nil ascending:YES];
if ([result count]!=0) {
NSManagedObject *obj = [result objectAtIndex:0];
NSDate *coreDataModify = [obj valueForKey:@"modificationDate"];
NSDate *constactModify = personInfo.modificationDate;

switch ([coreDataModify compare:constactModify]) {
case NSOrderedAscending:
{ //update
personInfo.objectId =[[obj.objectID copy] autorelease];
[pm savePersonInfo:personInfo];
break;
}
default:
break;
}
}else {
// [pm savePersonInfo:personInfo];
}
}else {
NSLog(@"refRecordId is nul");
}

//commit
// [pm commitEventWithEachCount:i+1];
}
//保存不足30的余数
[pm commitEventWithEachCount:0];

//release persons
CFAutorelease(persons);
}


有木有什么办法 缩短这些时间,我测试出来的时间是18秒多。很纠结,我注释掉了 写入操作,但是还是要17秒多。
save操作也注释掉了,也要17秒。
希望有人可以帮我看看 要怎么改进,或者有什么新的 想法,也可以说说。谢谢了。

补充:上面的代码,主要是 for 循环,里面没什么计算的操作,难道是内存 alloc 的时候,会消耗时间嘛?
...全文
669 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
相奇 2012-12-06
  • 打赏
  • 举报
回复
引用 2 楼 jiangyuaiqing 的回复:
你可以用shark测试一下,哪个代码块运行的效率最低,即用了最长的时间。
我去试试看,谢谢了。
相奇 2012-12-06
  • 打赏
  • 举报
回复
引用 1 楼 darkdong 的回复:
应该还是io操作费时间,但似乎也不会那么长吧.再详细打印看看 一般io操作都放到后台线程里去做,避免阻塞主线程,当然读写时间并不会少,但用户体验会比较好
我这个是在 其他线程里弄的,不过花费时间要20秒左右。数据大概 1700个- -!我想缩短到10秒-15秒。因为其他的app实现了,而且只要了8秒,我就想优化下。 不过还是谢谢你了
Snake_Jay 2012-12-05
  • 打赏
  • 举报
回复
你可以用shark测试一下,哪个代码块运行的效率最低,即用了最长的时间。
巴依老爷 2012-12-05
  • 打赏
  • 举报
回复
应该还是io操作费时间,但似乎也不会那么长吧.再详细打印看看 一般io操作都放到后台线程里去做,避免阻塞主线程,当然读写时间并不会少,但用户体验会比较好

29,049

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧