编程语言中不同结构的速度(Java/C#/ C++/Python/...)

Fel*_*bek 7 c# java algorithm performance

我的老板告诉我,他从一本书中学到了快速的VB6算法,并且写东西的最短方式不一定是最快的(例如,内置方法有时比自写方法慢,因为它们进行各种检查或unicode转换,在你的情况下可能没有必要).

现在我想知道,是否有一个关于快速不同结构的信息的网站有各种语言,尤其是.Java/C#/ Python/...(也是C++,但有很多编译器可能有很多不同).

例如,之间存在差异

if (a()) b();
Run Code Online (Sandbox Code Playgroud)

a() && b();
Run Code Online (Sandbox Code Playgroud)

另一个例子:a = a * 4可能编译成相同的代码a <<= 2吗?

我可以自己测试一下,当然,写两个然后运行它们100000次并比较运行时,但我也想学习写东西的新方法,甚至可能是我以前没有考虑过的东西.谢谢你的回答!

duf*_*ymo 11

我会说这些可能是微观优化,不会有所作为,也不值得努力.

算法选择确实很重要,但你应该阅读的书应该更像是这个或者这个.

如果你真的想看看你所引用的那些黑客是否有所作为,我建议你先获得想要改变的代码的性能基线.以相同的方式进行更改并重新测量性能.如果你得到的结果表明它是值得的,那么一定要继续.

您最好分析代码并找出代码中最慢的部分所处的位置以及完成大部分工作的位置.猜测很少在优化时起作用.

  • 老板可能一直在考虑其他事情,但他/她用这个建议种下了坏种子.答案仍然是"不要这样做". (5认同)

Hen*_*man 9

if (a()) b(); 和之间有区别a() && b();吗?

是的,可读性.第一个是关于意图的更清楚.

a = a * 4可被编译到相同的代码a <<= 2

很可能是的.但即使它们最终成为不同的CPU指令,时间上的差异也会非常小,并且依赖于之前和之后的指令.

现代CPU的微优化是

  • 大多是徒劳的
  • 非常困难
  • 经常与5年或10年前的"优化"相反.

总之,首先编写可读代码.如果遇到性能问题,请先进行配置文件和测量.

您应该担心使用正确的算法,而不是阅读超出需要的集合等.但是在指令/语句级别,您和实际执行的内容之间有太多层(编译器,抖动,流水线CPU).


Vla*_*nov 8

不要被这种微观优化所困扰.他们不会在性能方面给你任何东西.

如果您遇到性能问题,请找出瓶颈并对其进行优化.