将独立方法置于循环或单独循环下是一种好习惯吗?

时间:2011-08-16 08:24:31

标签: c#

例如

  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表达式或委托中我没有将多个陈述放在一起。

5 个答案:

答案 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)

我想说使用更容易阅读和理解的方法。