![]() |
1
35
我认为主要的事情是尽可能清楚地编写代码。像这样的微观优化不应该成为焦点。 例如,如果您有类似的内容:
然后更清楚地使用switch语句:
再次强调,我将重点放在使代码易于阅读和维护,而不是纳米二级效率的提高。 |
![]() |
2
4
如果任何编译器能够验证这些值是否合理紧凑,那么它都将生成跳转表。(我怀疑他们是否在这种情况下,是10的倍数。) 这是一个微观优化。只有当你知道微观优化是有意义的。通常,在其他地方会有更大的“要炒的鱼”,以函数调用的形式,不需要函数调用就可以完成。但是,如果您已经从这段代码中调优了daylights,并且您的分析显示,很好的一部分时间(如10%或更多)正在进入这些if语句(而不是它们的内容),那么它会有所帮助。例如,在字节码解释器中可能会发生这种情况。
补充:我喜欢使用的另一个原因
|
![]() |
3
2
如果你有 非常大 一连串的if-else语句,那么,是的,您可能会感觉到不同。但是你写这么长的一条ifelse链是不现实的。即使你这样做了,也不太可能出现性能瓶颈。 首先编写可读的代码,当需要进行性能优化时,让分析器引导您自己。 |
![]() |
4
1
可能无关紧要。字节码只是到JVM的一种“传输格式”。在JVM中所发生的事情与字节码表示非常不同。(例如:字节码不提供float操作,所以float+-*/%float作为双操作完成,然后结果被转换回float。对于byte/short也是如此,它们被转换为int,然后返回。)但是对于switch,它们是两种字节码格式,一种已经具有跳转表。但老实说:我会选择一种最适合你和你程序的读者的格式。剩下的工作由JVM来完成。如果你太聪明了,你的JVM可能没有得到你的观点,最终程序会变慢。 “我们应该忘记小效率,比如说97%的时间:过早的优化是万恶之源”D.Knuth |
![]() |
5
0
|
![]() |
Sweepy Dodo · JSON lite的格式化 6 月前 |
![]() |
giantjenga · 优化整数向量到二进制向量的转换 8 月前 |
![]() |
Zegarek · Postgresql递归查询未提供预期结果 8 月前 |
![]() |
Joe · 为什么这两个查询之间的性能存在如此大的差异? 11 月前 |
![]() |
tic-toc-choc · 在`dplyr中高效使用列表进行过滤` 11 月前 |
![]() |
Mohan · 是否有一种更快的方法来编写代码,从1:N中提取许多随机样本? 12 月前 |
![]() |
user2980746 · 在C#字典中键入xyz对的最有效方法是什么? 12 月前 |