And*_*son 3 c iphone cocoa-touch objective-c
// obj C版本,有些 - 在18,000次迭代中不到一秒
for (NSString* coordStr in splitPoints) {
char *buf = [coordStr UTF8String];
sscanf(buf, "%f,%f,", &routePoints[i].latitude, &routePoints[i].longitude);
i++;
}
Run Code Online (Sandbox Code Playgroud)
// C版 - 在18,000次迭代中超过13秒
for (i = 0; buf != NULL; buf = strchr(buf,'['), ++i) {
buf += sizeof(char);
sscanf(buf, "%f,%f,", &routePoints[i].latitude, &routePoints[i].longitude);
}
Run Code Online (Sandbox Code Playgroud)
作为一个推论问题,有没有办法让这个循环更快?
另见这个问题:另一种速度提升可能吗?
bbu*_*bum 10
测量,测量,测量.
使用仪器中的采样器仪器测量代码.
话虽如此,与Objective-C代码相比,C代码明显效率低下.
也就是说,快速枚举 - for(x in y)语法 - 非常快,更重要的是,它意味着它splitPoints是一个包含已经被解析为单个对象的一堆数据的数组或集合.
strchr()第二个循环中的调用意味着您正在动态解析内容.它本身strchr()就是一个循环操作,并且会消耗时间,因为目标字符出现之间的字符数增加.
但这都是猜想.与所有优化一样,推测是无用的,使用提供的[相当棒的]工具集合收集具体数据是确定的唯一方法.
一旦测量完毕,就可以加快速度.
| 归档时间: |
|
| 查看次数: |
523 次 |
| 最近记录: |