C# LINQ Select是否会影响性能?
假设我有一个对象列表,其中有30个属性,如下所示:C# LINQ Select是否会影响性能?,c#,performance,linq,C#,Performance,Linq,假设我有一个对象列表,其中有30个属性,如下所示: List<myObject> objectList = db.myObject.Where(x => x.Brand == "Ford").ToList(); List objectList=db.myObject.Where(x=>x.Brand==“Ford”).ToList(); objectList拥有约25万名成员 如果我只从db中获得两个属性,并制作如下列表: List<myObject2> obj
List<myObject> objectList = db.myObject.Where(x => x.Brand == "Ford").ToList();
List objectList=db.myObject.Where(x=>x.Brand==“Ford”).ToList();
objectList拥有约25万名成员
如果我只从db中获得两个属性,并制作如下列表:
List<myObject2> objectList2 = (from x in db.myObject
where x.Brand == "Ford"
select new myObject2 {Brand = x.Brand, userId = x.userId}).ToList();
List objectList2=(从db.myObject中的x开始)
其中x.品牌==“福特”
选择newmyobject2{Brand=x.Brand,userId=x.userId});
此列表也有25000个成员,但此列表中的对象有2个属性。
第二个列表中的遍历速度会比第一个列表快吗?还是会是一样的?请开导我。谢谢。您的Linq语句将被转换为SQL—类似这样的内容
select brand, userId from myTable where Brand == "Ford"
如果省略Linq语句中的投影,则会发出以下sql:
select * from myTable where Brand == "Ford"
这将返回表中的所有列。当然,在这种情况下,指定返回的列应该比省略投影更快
编辑:但是从
ResultSet
中的一个元素到下一个元素的遍历性能不应该有太大的影响,较大的是要从数据库中获取的数据的实际大小 您的Linq语句被转换为SQL—类似这样
select brand, userId from myTable where Brand == "Ford"
如果省略Linq语句中的投影,则会发出以下sql:
select * from myTable where Brand == "Ford"
这将返回表中的所有列。当然,在这种情况下,指定返回的列应该比省略投影更快
编辑:但是从
ResultSet
中的一个元素到下一个元素的遍历性能不应该有太大的影响,较大的是要从数据库中获取的数据的实际大小 我的问题是,当我在列表中遍历时会更快吗。。。例如,如果我在该列表中进行搜索会更快吗?一般来说,不会,相同的内存搜索不会有太大不同。如果你想让它在数据库级别更快地搜索(通过适当的索引等)。@jason:就像所有与性能相关的事情一样,去衡量它。分析你的代码,看看这里是否真的有瓶颈,如果有,尝试修复它并衡量改进。我的问题是,当我在列表中遍历时,它会更快吗。。。例如,如果我在该列表中进行搜索会更快吗?一般来说,不会,相同的内存搜索不会有太大不同。如果你想让它在数据库级别更快地搜索(通过适当的索引等)。@jason:就像所有与性能相关的事情一样,去衡量它。分析你的代码,看看这里是否真的有瓶颈,如果有,试着修复它并衡量改进。这取决于你所说的更快是什么意思。当最后的列表不在时,SQL查询会更快(要获取的数据更少:所有列而不是两列)。@DmitryBychenko当我在这些列表中搜索一个对象时(当它们都在内存中时),它会是一样的,对吗foreach(objectList中的var item){…}
和foreach(objectList2中的var item2){…}
的速度相同,这取决于您所说的更快是什么意思。当最后的列表不在时,SQL查询会更快(要获取的数据更少:所有列而不是两列)。@DmitryBychenko当我在这些列表中搜索一个对象时(当它们都在内存中时),它会是一样的,对吗foreach(objectList中的var项){…}
和foreach(objectList2中的var项2){…}
的速度相同