Eri*_*sen 3 iphone optimization cocoa objective-c
我正在使用iPhone应用程序进行调试/优化阶段.我还有一个瓶颈 - 程序有明显滞后的唯一地方,它在下面的循环中:(顺便说一句,我已经用字母和类型重命名了变量.(实名更加人性化)在实际的应用程序中,但在上下文中没有任何意义,所以我希望这很清楚.)这是循环:
for(i=0;i<xLong; i+=yFloat*zShort){
aFloat=0.0;
for(int j=i;j<i+yFloat*zShort;j++){
aFloat=hArray[j]/kFloat;
}
bNSNumber = [NSNumber numberWithFloat:aFloat];
[cNSMutableArray addObject:bNSNumber];
}
Run Code Online (Sandbox Code Playgroud)
所有异议创建和清理都在此循环之外.
(这应该是非常直接的,这里发生了什么,但基本上我有一个非常大的数组(数以百万计),我在yFloat*zShort长度的块中经历该数组,添加该块中的所有元素,并且将最终总和插入到另一个数组中.因此,如果hArray长度为百万个元素,并且我的块长度为200,我将对前200个元素求和,在cNSMutableArray中插入该总数,然后转到hArray中的下两个元素.最后,cNSMutableArray将长达5000个元素.)
当外环大约为25k且内环大约为200时,此代码运行大约需要4秒.我肯定希望尽可能地降低这一点,因为在现实世界中,外环可能会更大一些.
任何想法如何加快这一点?
感谢您的任何想法!
首先,从您的描述中,它听起来像内部循环应该是:
for(int j=i;j<i+yFloat*zShort;j++){
aFloat+=hArray[j]/kFloat;
}
Run Code Online (Sandbox Code Playgroud)
无论如何,由于kFloat没有改变,你可以将其移出循环并进行一次除法:
for(int j=i;j<i+yFloat*zShort;j++){
aFloat+=hArray[j];
}
aFloat/=kFloat;
Run Code Online (Sandbox Code Playgroud)
也就是说,这会影响最终值的准确性.如果不确切知道你在做什么,我不知道这是否重要.
| 归档时间: |
|
| 查看次数: |
309 次 |
| 最近记录: |