把独立的方法放在一个循环或单独的循环下是一个好做法吗?

本文关键字:循环 一个 单独 方法 独立 | 更新日期: 2023-09-27 18:05:56

例如

  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表达式或委托中,我不必将多个语句放在一起。

把独立的方法放在一个循环或单独的循环下是一个好做法吗?

1:性能无差异;如果你使用作为表达式的一部分,它只是给了你使用

形式的灵活性

2: LINQ在这里收益不大;你仍然最终做同样的循环(除非你切换到Parallel,在这种情况下,你的++是坏的)-但是如果你添加LINQ你增加了开销来做它。

rehow many loops;在这种情况下,我将做一个循环-但是根据边界等逻辑地定义它。除非其中任何一个操作都很复杂,在这种情况下,可以将其拆分为单独的方法。

(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个循环所减少的时间小于寄存器丢失所花费的时间

回答你的第一个问题:编译器为你照顾,它是否更好取决于用法,因为行为略有不同。我认为在for循环的情况下,编译器会发出++i,但对于for循环,它也没有区别。

回答你的第二个问题:在这种情况下没有最佳实践的概念。无论如何,lambda可以执行多个操作。编写最容易理解和维护的代码

同样的post和pre increment的概念在c#中也适用。

和分隔成多个循环,正如你所展示的,将创建更多的头,因为现在你的迭代两次比以前一次。

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