昨天和别人讨论了一下linq的性能,以下是简单的性能测试比较代码,
在这里解释一下,代码的执行速度计时测试不能用datetime了,不够精确。
建议用StopWatch
class Program
{
static void Main(string[] args)
{
test();
}
static void test()
{
List<MyClass> list1 = new List<MyClass>();
for (int i = 0; i < 10000000; i++)
{
MyClass aa=new MyClass();
aa.Name = "测试数据" + i;
aa.id = i;
list1.Add(aa);
}
Stopwatch timer = new Stopwatch();
#region for循环
timer.Start();
List<MyClass> list2 = new List<MyClass>();
int count = 0;
foreach (MyClass s in list1)
{
if (s.id >= 52 && s.id < 850) { list2.Add(s); }
}
count = list2.Count;
timer.Stop();
Console.Write("集合匹配数" + count + ",for循环耗时:");
Console.WriteLine(timer.Elapsed.Ticks);
#endregion
#region linq
timer = new Stopwatch();
timer.Start();
var list3 = list1.Where(product => product.id >= 52 && product.id < 850);
//list1.Where(product => product.id >= 52 && product.id < 850).ToArray().Count();
int count3 = list3.Count();
timer.Stop();
Console.Write("集合匹配数" + count3 + ",linq耗时:");
Console.WriteLine(timer.Elapsed.Ticks);
#endregion
#region delegate
timer = new Stopwatch();
timer.Start();
List<MyClass> list4 = list1.FindAll(delegate(MyClass post)
{
return post.id >= 52 && post.id < 850;
});
int count4 = list4.Count();
timer.Stop();
Console.Write("集合匹配数" + count4 + ",delegate耗时:");
Console.WriteLine(timer.Elapsed.Ticks);
#endregion
Console.Read();
}
public class MyClass
{
public string Name { get; set; }
public int id { get; set; }
}
}
测试截图
事实说明,linq效率是比for循环要差一些,但是如果集合数据不是很大的话,差距并不明显。
建议大家还是去拥抱新技术吧。