在不变列表上使用linq查询的开销
本文关键字:linq 查询 开销 列表 | 更新日期: 2023-09-27 18:03:58
在调试我的代码时,我知道如果您使用Linq查询来分配任何属性,无论何时使用该属性,查询将每次执行。所以如果你在做这样的事情:
Myprop= MyList.where(p=>p.Stauts=="ABKI BAAR ..");
所以在你的代码中,每当你执行foreach(var prop in Myprop)',
Myprop. tolist ().count() '或任何Myprop的使用,它将导致每次执行linq查询。
每次执行linq查询是不是一个坏主意,特别是当我不修改MyList
时?
您可以通过在表达式后调用ToList
来规避此问题:
Myprop = MyList.where(p=>p.Stauts=="ABKI BAAR ..").ToList(); // or .ToArray()
这样,它将立即执行Linq查询,而您不会每次都执行查询,因为现在您有一个列表。
这显然没有考虑到后面源列表的变化
使用.ToArray()
或.ToList()
实现查询结果
所以,不用
Myprop = MyList.Where(p => p.Status == "ABKI BAAR ..");
使用Myprop = MyList.Where(p => p.Status == "ABKI BAAR ..").ToArray();
有关ToList或ToArray的更多信息,请参阅MSDN文档。
你当然不应该写Myprop.ToList().Count()
。这将使查询物化(或复制已经物化的结果),计算结果,然后丢弃查询的物化结果(或其副本)。如果你只需要计数,就做Myprop.Count()
。