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.
}