Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.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/8/linq/3.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循环数据-性能_C#_Linq - Fatal编程技术网

C# 通过LINQ循环数据-性能

C# 通过LINQ循环数据-性能,c#,linq,C#,Linq,考虑以下两个模块: var result = dataTable.AsEnumerable().Where(t=>whatever == whatever); foreach (DataRow row in result) //do something 及 由于Where子句的存在,第一个块理想情况下需要循环的数据量较小,第二个块必须循环所有数据 因为LINQ查询仍然必须遍历整个选择才能完成Where,所以在块1中节省的时间是否丢失了?必须遍历整个内容才能根据Where子句进行测试。@C

考虑以下两个模块:

var result = dataTable.AsEnumerable().Where(t=>whatever == whatever);
foreach (DataRow row in result) //do something

由于Where子句的存在,第一个块理想情况下需要循环的数据量较小,第二个块必须循环所有数据


因为LINQ查询仍然必须遍历整个选择才能完成Where,所以在块1中节省的时间是否丢失了?

必须遍历整个内容才能根据Where子句进行测试。@CoryNelson:两个示例都使用
foreach
…@jonsket doh!哈哈。@James-在不知道编译器将要进行什么优化的情况下,我的直觉告诉我第二个会更快。首先,在整个集合上应用
Where
,这本质上是对“whatever”的foreach循环测试。第一个代码段中的第二个
foreach
循环将有一个较小的结果集,但将重复
Where
中的一些工作。第二个代码段遍历所有行,但只执行一次。if块与第一个代码段中的等价性测试基本相同。除了迭代两次(而不是一次)之外,第一个版本中的
AsEnumerable()
部分也浪费了一些时间/资源。另一方面,LINQ方法经过高度优化,这不是一个太复杂的查询。最好的确定方法是什么?实际上是在测试它。如果您已经设置了一个(非常简单的)测试框架并自己检查它,而不是在这里发布问题,那么您已经知道答案了。
foreach(DataRow row in dataTable.Rows)
{
    if (row[whatever] == whatever] //do something.
}