什么是for循环的优化方式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是for循环的优化方式相关的知识,希望对你有一定的参考价值。

对于性能而言,For Loop更适合编码标准

var totalCount = new List<int>();
  1. 的foreach
 foreach(var student in StudentList)
 {
      var studentItem= student.DataContext as studentEntity;
      if (studentItem!= null)
      {
            totalCount.Add(studentItem.Id);
      }
 }                
  1. 的ForEach
StudentList?.ForEach(student=>
{
    var studentItem= student.DataContext as studentEntity;
    if (studentItem!= null)
    {
        totalCount.Add(studentItem.Id);
    }
});

我的问题是,在快速性能中哪个循环更正确。

如果在我的StudentList中有1000及以上的记录,我想在c#中执行逻辑操作,那么ForLoop对于Fast Perfomance更好

先感谢您 !!!

答案

让.Net为你做,摆脱任何循环:

https://msdn.microsoft.com/en-us/library/z883w3dc(v=vs.110).aspx

 totalCount.AddRange(studentList);

它更具可读性和(可能)更高效。

编辑:如果totalCountstudentList有不同的类型,添加Select,例如:

totalCount.AddRange(studentList.Select(student => student.Id));
另一答案

它们在优化方面几乎相同,你可以查看Eric Lippert's blog: “foreach” vs “ForEach”,在那里他谈到这个并在内部展示forEach。

public static void ForEach<T>(this IEnumerable<T> sequence, Action<T> action)
{ 
  // argument null checking omitted
  foreach(T item in sequence) action(item);
}
另一答案

另一个用于从另一个列表创建列表的.NET(LINQ)方法(一个班轮粉丝的单行)

var totalCount = studentList.ToList();

另一种LINQ方法,当你已经存在的项目时。

var totalCount = new List<int> { 1, 2 ,3 };

var all = totalCount.Concat(studentList).ToList();

不可能不坚持榜样,因为只有当你知道问题的背景时才能实现性能。

在您更新的示例中,可读且速度足够快的方法

 var totalCount = 
     StudentList.Select(student => student.DataContext as Entity)
                .Where(entity => entity != null)
                .Select(entity => entity.Id)
                .ToList();

以上是关于什么是for循环的优化方式的主要内容,如果未能解决你的问题,请参考以下文章

常见的for循环优化方式

Java for循环嵌套for循环,你需要懂的代码性能优化技巧

JDK1.8新特性Lambda表达式简化if-else里都有for循环的优化方式

代码中大量的套娃式for循环,你有哪几种方案可以优化?

java 大量for循环如何优化

前端性能优化:jquery的each为什么比原生的for循环慢很多?