【问题标题】:Speeding up a For Loop with large number of Iterations ? Objective C用大量迭代加速 For 循环?目标 C
【发布时间】:2011-12-16 18:15:41
【问题描述】:

我的 Open GL ES 应用程序中有以下简单的 For 循环:

for (NSValue * value in pointerStorageArray) 
{
    NSLog(@"Freeing Malloced Data");

    free(value);
}

问题在于 pointerStorageArray 包含大约 40000 个数据项(3D 对象的所有数据),因此循环大约需要一分钟才能完成。

有什么方法可以加快循环完成的时间吗?

编辑

这个问题现在说明了连续 18 小时不编码的重要性。删除 NSLog 语句将其从 5 分钟加快到 4 秒;)

【问题讨论】:

  • 如果没有NSLog 函数,我希望它会快很多。没有那个消息你能试试吗?
  • 天哪——我是个白痴。谢谢!!!!!!!!!!
  • 现在运行 5 秒 :)
  • 很高兴听到它:) - 这是一个很好的说明在开始优化之前始终分析您的代码

标签: iphone objective-c xcode memory-management for-loop


【解决方案1】:

如果减速实际上是由重复调用 free() 引起的,那么您可以考虑分配一些更大的连续内存块,而不是 40000 个单独的内存块。

与往常一样,您应该找到一种方法来分析您的代码以确定瓶颈的确切位置。

【讨论】:

  • 瓶颈在于对 free 的调用。我的C知识不是很好。问题是从 for 循环中调用 malloc 语句并分配,如您所说,40 000 个单独的内存块。你能指出我如何合并它们的正确方向吗?
  • 理想情况下,您应该将所有内容从一个单独的池中分配出来,然后扔掉这个池。不过,我从来没有在 iOS 上这样做过,所以我不知道你会怎么做。
猜你喜欢
  • 2012-01-05
  • 1970-01-01
  • 2022-01-23
  • 2017-02-09
  • 1970-01-01
  • 1970-01-01
  • 2016-09-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多