S++
或S=S+1
,可以建议将值递增1,为什么?
我认为S++
应该是首选,因为它是内部的单机指令(INC)。如果我错了,请让我纠正。其他方式我认为两者都是相同的,除了++
是一元的,它的后增量和运算符重载是不同的。
C#会有什么不同吗?
答案 0 :(得分:15)
你永远不应该尝试做这么小的优化。对于几乎所有情况,现代编译器足够聪明,可以为所有3个选项(++i
,i+=1
,i=i+1
生成相同的汇编代码。
是的,有时您可以获得一些微小的性能提升,例如,对于某些具有非常复杂的++
运算符的类,使用前缀++
而不是postfix,但在绝大多数情况下,您的程序部分是花费大部分时间不是增量,所以为了获得一些真实的结果,你应该在真实(或接近真实)测试中分析你的代码,找到效率较低的常用代码片段。
此外,还有一个更重要的事情需要考虑 - 它的代码可读性。在绝大多数情况下,它比性能更重要,只有在时间最关键的代码中,我们才能牺牲性能的可读性(甚至在那里,并非总是如此!有时候最好只添加更多硬件)。
所以,我的建议是使用以最清晰的方式陈述您的想法的选项。
答案 1 :(得分:4)
回到过去,这种事情有所不同。我曾经查看生成的机器代码,然后调整C源代码以获得额外10%的速度提升。
不再了。您无法通过查看机器代码来预测速度。
您可以尝试测试不同的递增方式,看哪一种更快。一旦你对此感到厌倦,就不要再担心速度而要专注于编写清晰,无错误的代码。
答案 2 :(得分:3)
C ++同时有pre and post-increment operators 已经回答here,预增量运算符通常更快 (主要是因为编译器可以更好地优化它,并且它不需要返回旧值的临时副本)。
答案 3 :(得分:1)
在通过执行s = s + 1 OR s ++递增变量s之间,我们首先需要接受操作本身是非常基本,简单和直接的。我们基本上将存储在变量中的值递增固定数。即使s ++比s = s + 1更快地执行,这两种不同方法之间的时差也是相同的。 我尝试了以下代码:
int s = 1;
s++;
它提供了以下编译和执行时间:
编译时间:0.32秒,绝对运行时间:0.14秒,CPU时间:0秒,内存峰值:3 Mb,绝对服务时间:0,46秒
之后,我尝试了以下代码:
int s = 1;
s = s + 1;
它给出了以下执行时间:
编译时间:0.32秒,绝对运行时间:0.14秒,CPU时间:0秒,内存峰值:3 Mb,绝对服务时间:0,46秒
所以,就像我说的那样,两个操作之间没有显着差异,因为它们本身非常简单。存在时差;但是,上面给出的执行时间并不是那么具体,这意味着必须有一个> 0.001的时间差,这几乎可以忽略不计。希望这能回答你的问题。
答案 4 :(得分:0)
++更强大。 你可以做那样的事情
if(a++ > 7) b=0;