Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 多次迭代还是复杂的代码?_Performance_Loops_Iteration - Fatal编程技术网

Performance 多次迭代还是复杂的代码?

Performance 多次迭代还是复杂的代码?,performance,loops,iteration,Performance,Loops,Iteration,这个问题我已经遇到好几次了。假设我迭代一个列表,我想用不同的方式“查看”它(列表的数据可以根据您解析它的方式进行不同的解释)。这只能在一次迭代中完成,但代码看起来混乱而复杂。另一种方法是对列表进行多次迭代;每项任务一次。我同意这一点,但如果列表非常大,并且每次迭代都会带来高昂的性能代价,该怎么办? 因此,总而言之,最好是: a)一次迭代并处理所有内容 b) 执行多次迭代,每次迭代仅处理一项任务 我期待着听到你的回答。好问题。答案是“视情况而定” 首先,我注意到您没有指定体系结构。例如,如果你在G

这个问题我已经遇到好几次了。假设我迭代一个列表,我想用不同的方式“查看”它(列表的数据可以根据您解析它的方式进行不同的解释)。这只能在一次迭代中完成,但代码看起来混乱而复杂。另一种方法是对列表进行多次迭代;每项任务一次。我同意这一点,但如果列表非常大,并且每次迭代都会带来高昂的性能代价,该怎么办?
因此,总而言之,最好是:

a)一次迭代并处理所有内容
b) 执行多次迭代,每次迭代仅处理一项任务


我期待着听到你的回答。

好问题。答案是“视情况而定”

首先,我注意到您没有指定体系结构。例如,如果你在GPU或CPU上做事情会有很大的不同,同样,不同的CPU也会有不同的工作方式。为了简单起见,现在我假设使用Intel CPU,但请记住这一点

你用“性能”标记了这个问题,所以我将这样解释这个问题。至于性能,只有一个黄金标准,那就是基准会告诉你真相。也就是说,有一些准则需要牢记:

  • 顺序数据访问优于随机访问。这一切都与内存模型和矢量化的工作方式有关
  • 不可预测的分支可能会降低性能。通常情况下,当你做一个单一的单细胞功能,做任何事情时,都会发生这种情况

  • 如果你能处理小内存块(比如,这是代码质量和性能之间的折衷。无法给出一般性的答案。根据需求,两种选择都是有效的。

    做一个简单的选择,并将每个任务包装到单独的函数/模块中,该函数/模块只对列表的单元项做一些事情,以获得更好的结构,并确保对象不会意外变化。没有示例代码和语言规范,这个问题非常模糊。