把独立的方法放在一个循环或单独的循环下是一个好做法吗?
本文关键字:循环 一个 单独 方法 独立 | 更新日期: 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#中也适用。
和分隔成多个循环,正如你所展示的,将创建更多的头,因为现在你的迭代两次比以前一次。
我会说使用更容易阅读和理解的方法。