我们正在尝试优化一些方法。我们使用Redgate的性能分析器来查找一些性能泄漏。
我们的工具在几个方法中使用对象的Linq。但是我们已经注意到,在包含+/-1000个对象的集合上,
性能分析器也会警告查询非常缓慢。我已经添加了带有分析器结果的图片。
无法将集合添加到数据库然后查询数据库。
有什么推荐吗?
谢谢!
我们的工具在几个方法中使用对象的Linq。但是我们已经注意到,在包含+/-1000个对象的集合上,
FirstOrDefault
需要很长时间。性能分析器也会警告查询非常缓慢。我已经添加了带有分析器结果的图片。
无法将集合添加到数据库然后查询数据库。
有什么推荐吗?
谢谢!
private SaldoPrivatiefKlantVerdeelsleutel GetParentSaldoPrivatiefKlantVerdeelsleutel(SaldoPrivatiefKlantVerdeelsleutel saldoPrivatiefKlantVerdeelsleutel, SaldoGebouwRekeningBoeking boeking, int privatiefKlant)
{
SaldoPrivatiefKlantVerdeelsleutel parentSaldoPrivatiefKlantVerdeelsleutel = null;
if (saldoPrivatiefKlantVerdeelsleutel != null)
{
try
{
parentSaldoPrivatiefKlantVerdeelsleutel = saldoPrivatiefKlantVerdeelsleutel.AfrekenPeriode.SaldoPrivatiefKlantVerdeelsleutelCollection
.FirstOrDefault(s => (boeking == null || (s.SaldoVerdeelsleutel != null &&
(s.SaldoVerdeelsleutel.GebouwVerdeelSleutel.ID == boeking.SaldoGebouwRekeningVerdeling.SaldoGebouwRekening.SaldoVerdeelsleutel.GebouwVerdeelSleutel.ID)))
&& s.PrivatiefKlant.ID == privatiefKlant);
}
catch (Exception ex)
{ }
}
return parentSaldoPrivatiefKlantVerdeelsleutel;
}
图像 : 个人资料报告
boeking == null
检查和SaldoGebouwRekeningVerdeling.SaldoGebouwRekening.SaldoVerdeelsleutel.GebouwVerdeelSleutel.ID
值移动到循环之外。没有理由为集合中的每个元素重新评估它。 - Chris Sinclaircatch{}
非常有害,应该将其移除。 - H Hs.SaldoVerdeelsleutel.GebouwVerdeelSleutel.ID
这样?因为它可能是一个经典的SELECT N+1反模式。 - xanatos