例如
for (int i=1;i<10000;i++)
{
j++;
k++;
}
或
for (int i=1;i<10000;i++)
{
j++;
}
for (int i=1;i<10000;i++)
{
k++;
}
注意1:在c#中,使用++i
代替i++
还是更好吗?
注2:如果我们将一个大循环溢出到单独的简单循环中,那么我们可以将它转换为Linq形式,例如enumerable.range(1,10000).forall(x=>j++)
,这样在lambda表达式或委托中我没有将多个陈述放在一起。
答案 0 :(得分:4)
1:性能没有差异;如果您使用它作为表达式的一部分,它只是让您灵活地使用任何一种形式
2:LINQ在这里收获的很少;你仍然最终做同样的循环(除非你切换到Parallel
,在这种情况下你的++
被破坏了 - 但是如果你添加LINQ你会增加开销这样做。
重新循环多少次;在这种情况下,我会做一个循环 - 但是根据边界等逻辑地定义它。除非其中一个操作很复杂,在这种情况下可能会将其拆分为单独的方法。
答案 1 :(得分:2)
(1)几乎相同
(2)如果循环中的代码非常简单,例如i++
或j++
,则使用一个循环。请注意,对于两个复杂方法使用单独的循环可能比一个循环更快:
//better and faster
for (int i = 1; i < 1000; i++)
{
OneThing(i);
}
for (int i = 1; i < 1000; i++)
{
AnotherThing(i);
}
分离的循环提高了寄存器的命中率。如果将它们放在一个循环中,则减少1000个循环的时间少于寄存器未命中的时间成本。
答案 2 :(得分:1)
回答你的第一个问题:编译器为你处理这个问题,它是否更好取决于使用情况,因为行为略有不同。我认为编译器在++i
循环的情况下会发出for
,但对于for
循环,它也没有区别。
回答你的第二个问题:在这种情况下,没有最佳实践的概念。无论如何,你的lambda可以做多个动作。 编写最易于理解和维护的代码。
答案 3 :(得分:0)
同样的post和pre增量概念在c#中也很有用。
如你所示,分成多个循环应该创造更多的头脑,因为你的迭代次数是之前的两倍。
答案 4 :(得分:0)
我想说使用更容易阅读和理解的方法。