我在使用 linq 时遇到了一些性能问题,这导致了我的第一个 stackoverflow 问题:
以下代码中的测试函数针对这两个 linqs 查询执行了不同的次数:
int[] mydata = { 1, 2, 34, 5, 67, 8 };
var query = from i in mydata select new { i,v=test(i)};
var query2 = query.Where(v=>v.v == 2);
MessageBox.Show(query2.Count().ToString());
var query = from i in mydata where i==2 select new { i,v=test(i)};
MessageBox.Show(query.Count().ToString());
还有 Count() 函数,真的需要评估选择部分吗?这也意味着执行 query2.Select(i=>i) 将触发 test() 调用
如果这是要走的路,要执行像调用这样的延迟过滤器,则应更改第二个查询以减少不必要的 test() 调用:
var query = from i in mydata where (filter ? v=filtevalue : true) select new { v=test(i)};
MessageBox.Show(query.Count().ToString());
我需要执行的是构建一个大查询,然后在程序的不同部分过滤数据,而不为过滤掉的数据执行 Select 部分(以避免性能损失)。这可能吗?
提前致谢。