我正在使用getrusage()
测试所有这些不同的结构来计算(ru_utime + ru_stime)
执行前后的变化。
事实证明,执行相同的任务对于类似的任务没有什么区别结构体。结果如下:与printf
相比print
(1.5±0.5)%foreach
比for
快for
(6.0±1.0)%while
循环(迭代1kk元素的索引数组)与if/else
循环相比switch
(9.0±1.0)%if/else
(8.0±1.0)%快于switch
(测试超过两个案例,6个案例和10个可能的案例)。
所以我想知道,这些差异真的很重要吗?如果我们在代码中使用所有最有效的此类构造,它会有所不同吗?可能有6%,8%,9%或10%,总结会改变我们代码的效率吗?或者这些差异仍然不明显,我的意思是服务器对请求的响应几乎不会变化?此外,如果我们使用for
超过while
,printf
超过print
,foreach
超过for
,{{1}}超过{{1}}它会占用更多内存吗?
答案 0 :(得分:2)
在效果方面使用StackOverflow
个答案回答您的问题:
对于if/else
vs switch
:性能相同(more)。
for
vs foreach
vs while
:不重要(more)。
对于printf
vs print
:一个不比另一个好(more)。
我的拙见是,你使用对你来说更舒服的东西和/或更好地满足你的需求(彼此之间略有差异,换句话说除了表现之外,这取决于你需要什么)。在性能方面,为了最大限度地提高性能,还应该注意其他一些事项,例如降低程序中使用的代码的O
复杂性,网络延迟处理,需要时并行化任务等等。问题有点笼统,所以我试着以同样的方式回答。
答案 1 :(得分:0)
答案 2 :(得分:0)
这些差异真的很重要吗?如果我们在代码中使用所有最有效的此类构造,它会有所不同吗? 的
嗯,是的,不是。您在编写超低延迟应用程序吗?硬(确定性)实时应用程序?如果是,那么是的。等待用户的键盘输入?这是一个奇迹,你的CPU不会因无聊而死。所以,没有。
9%的差异可以忽略不计(你的精灵 - 主不会杀死巨魔),或者它可能非常重要(你的祖母的生命支持系统会杀死她)。
基本上,这不是一个可以在这里回答的问题。撇开环境/执行/编译器优化问题:它不仅是书本长度的主题,而且具体的书将取决于你在谈论什么类型的程序,以及对性能范围的后果和要求是什么。我猜想,对于99.99%的程序员来说,switch
或if/else
语句或类似的窥视孔优化之间的差异(实际上)绝对为零。
古老的格言"让它可读,让它运行,然后让它快速运行,如果你必须"可能是你最好的行动方案。即使在极其罕见的情况下,它可能很重要,只需确保使用分析器来确定"其中" "让它快速运行的一部分"阶段真的需要。