有传言说,scala中的for循环比while循环慢。
慢速:
for (i <- 0 until 10000) {
f(i)
}快速:
var i = 0
while (i < 10000) {
f(i)
i += 1
} 如何使用hprof来判断for循环是否是代码中的瓶颈?我正在使用-agentlib:hprof=cpu=samples分析我的代码,那么在"CPU示例“部分中会有什么方法呢?
我想知道我的优化工作应该集中在哪里。for循环是瓶颈吗?
发布于 2011-10-17 08:02:36
发布于 2011-10-17 10:07:12
将每个循环放在它自己的方法中,然后比较这些方法所花费的时间。并且使用足够的迭代来实际花费一些时间(或者将它们包装在另一个循环中)。10000次迭代应该需要微秒时间;这对于分析器来说很难测量。尝试十亿次(或10k次迭代的100k次迭代)。
而且,如果f(i)很昂贵,这将比循环花费的时间要长得多。此外,如果f(i)实际上什么也不做,它可能会被完全优化。所以要确保它这样做(例如,在某个地方更新一个计数器,计算一个和,或者其他什么)。
https://stackoverflow.com/questions/7787605
复制相似问题