最近开发过程中发现大家筛选数据的时候有两种写法,一种是Where().FirstOrDeafult(),另一种是直接使用了FisrOrDeFault() 于是自己写了一个简单的demo来进行测试(如果各位大神有更好的解答
最近开发过程中发现大家筛选数据的时候有两种写法,一种是Where().FirstOrDeafult(),另一种是直接使用了FisrOrDeFault()
于是自己写了一个简单的demo来进行测试(如果各位大神有更好的解答请多多指点)
首先贴上测试的代码
count++;
Random rand = new Random();
int len = 1000;
List<double> data = new List<double>(len);
for (int i = 0; i < len; i++)
{
int number = rand.Next(1, len);
double num = number / len * 100;
data.Add(num);
}
int local = rand.Next(1, len);
data.Insert(local, 3.14);
DateTime time1 = DateTime.Now;
var ii = data.Where(x => x == 3.14).FirstOrDefault();
DateTime time2 = DateTime.Now;
TimeSpan span1 = time2.Subtract(time1);
//Console.WriteLine($"第一次方法的执行时间:{span1.TotalMilliseconds}ms");
DateTime time3 = DateTime.Now;
var iii = data.FirstOrDefault(x => x == 3.14);
DateTime time4 = DateTime.Now;
TimeSpan span2 = time4.Subtract(time3);
textBox1.Text += $@"第{count}次运行结果:Where().FirstOrDefault时间:{span1.TotalMilliseconds}ms,FirstOrDefault时间:{span2.TotalMilliseconds}ms";
- 首先来看数据量为1000时的情况
从结果来看,两种实现方式并没有很大的区别
- 将数据量上升到10W的情况
10W的数据量相对来说已经比较大了,此时两者已经有所拉开距离,相对来说Where().FirstOrDeafult()的运行时间要比FisrOrDeFault()快一些
- 当集合内的数量达到1000W时
此时两者的差距就很明显了,Where().FirstOrDeafult()的运行时间明显要比FisrOrDeFault()快得多
从本次试验的结果来看,当数据量很小的时候,两种实现方式的运行时间相差不大,但是当数据量较大时,Where().FirstOrDeafult()的运行时间要比FisrOrDeFault()快一些