gpt4 book ai didi

iphone - 为什么这个 C 风格的代码比这个 obj-C 风格的代码慢 10 倍?

转载 作者:搜寻专家 更新时间:2023-10-30 19:51:55 26 4
gpt4 key购买 nike

//obj C 版本,有一些 - 在 18,000 次迭代中不到一秒

for (NSString* coordStr in splitPoints) {

char *buf = [coordStr UTF8String];
sscanf(buf, "%f,%f,", &routePoints[i].latitude, &routePoints[i].longitude);

i++;

}

//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);

}

作为一个推论问题,有什么方法可以使这个循环更快?

另请参阅此问题:Another Speed Boost Possible?

最佳答案

测量,测量,测量。

使用 Instruments 中的 Sampler 仪器测量代码。

话虽如此,与 Objective-C 代码相比,C 代码显然效率低下。

也就是说,快速枚举——for(x in y) 语法——非常快,更重要的是,这意味着 splitPoints 是一个数组或集合包含一堆已被解析为单个对象的数据。

第二个循环中的 strchr() 调用意味着您正在即时解析内容。就其本身而言,strchr() 是一个循环操作,会消耗时间,随着目标字符出现之间的字符数增加,时间会更多。

不过,这都是推测。与所有优化一样,推测是无用的,使用所提供的 [相当棒的] 工具集收集具体数据是确定的唯一方法。

一旦你测量了,你就可以让它更快。

关于iphone - 为什么这个 C 风格的代码比这个 obj-C 风格的代码慢 10 倍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1397352/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com