C#   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c# – 使用.First()和.Where()之间的区别.第一个()大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这有什么区别:

@H_770_5@myList.Where(item => item == 0).First();

还有这个:

@H_770_5@myList.First(item => item == 0);

后者对我来说更有意义,因为它更短,但我似乎更频繁地看到顶级版本.

解决方法

这取决于.如果LINQ正在转换为sql,那么它取决于如何处理转换.如果你正在使用LINQ到对象(例如你正在查看现有的内存数组)那么,然最终结果相同,但性能却明显不同.我跑了一些基准,实际上对结果感到惊讶.我会假设array.First()比array.Where(…)更高效.第一个(),但我发现它是另一种方式.

我创建了一个测试,看看遍历数组需要多长时间,我把搜索项放在数组的最后一个.我对每个测试进行了200次测试,每次测试@R_689_11262@000次迭代. Ticks的平均结果是:

First()         = 2655969
Where().First() = 1455211

正如你所看到的Where().First()大约只占First()的一半时间.

我的基准测试应用程序如下:

class Program
{
  private const int internalIterations = 1000;
  private const int externalIterations = 100;
  private const int dataSize = 100000;
  private const int search = dataSize - 1;

  private static readonly long[] resultsFirst = new long[externalIterations*2];
  private static readonly long[] resultsWhereFirst = new long[externalIterations*2];
  private static readonly int[] data = Enumerable.Range(0,dataSizE).ToArray();

  static void Main(String[] args)
  {
    Stopwatch sw = new Stopwatch();
    for (int i = 0; i < externalIterations; i++)
    {
      Console.WriteLine("Iteration {0} of {1}",i+1,externalIterations);
      sw.Restart();
      First();
      sw.Stop();
      resultsFirst[i*2] = sw.ElapsedTicks;
      Console.WriteLine("     First : {0}",sw.ElapsedTicks);

      sw.Restart();
      WhereFirst();
      sw.Stop();
      resultsWhereFirst[i*2] = sw.ElapsedTicks;
      Console.WriteLine("WhereFirst : {0}",sw.ElapsedTicks);

      sw.Restart();
      WhereFirst();
      sw.Stop();
      resultsWhereFirst[(i*2)+1] = sw.ElapsedTicks;
      Console.WriteLine("WhereFirst : {0}",sw.ElapsedTicks);

      sw.Restart();
      First();
      sw.Stop();
      resultsFirst[(i*2)+1] = sw.ElapsedTicks;
      Console.WriteLine("     First : {0}",sw.ElapsedTicks);
    }

    Console.WriteLine("Done!");
    Console.WriteLine("Averages:");
    Console.WriteLine("     First Average: {0:0.00}",resultsFirst.Average());
    Console.WriteLine("WhereFirst Average: {0:0.00}",resultsWhereFirst.Average());

  }

  private static void WhereFirst()
  {
    for (int i = 0; i < internalIterations; i++)
    {
      int item = data.Where(d => d == search).First();
    }
  }

  private static void First()
  {
    for (int i = 0; i < internalIterations; i++)
    {
      int item = data.First(d => d == search);
    }
  }
}

更新

我尝试使用List而不是数组作为数据源,发现它更慢.

数据创建行如下所示:

private static readonly List<int> data = Enumerable.Range(0,dataSizE).ToList();

最终的结果是:

First()         = 3222609
Where().First() = 2124652

大佬总结

以上是大佬教程为你收集整理的c# – 使用.First()和.Where()之间的区别.第一个()全部内容,希望文章能够帮你解决c# – 使用.First()和.Where()之间的区别.第一个()所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。