Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ Select是否会影响性能?_C#_Performance_Linq - Fatal编程技术网

C# LINQ Select是否会影响性能?

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

假设我有一个对象列表,其中有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> 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){…}
的速度相同