在不变列表上使用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时?

在不变列表上使用linq查询的开销

您可以通过在表达式后调用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()