C#中的LINQ到对象 - FirstOrDefault性能 [英] c# Linq to Objects - FirstOrDefault performance
问题描述
我们正在努力优化我们的一些方法。我们使用展鹏的性能分析器找到一些性能泄漏。
We're trying to optimize some of our methods. We use Redgate's Performance profiler to find some performance leaks.
我们的工具使用LINQ to对象的几种方法。但是,我们注意到,一个 FirstOrDefault
花费很长的与+/- 1000个对象的集合。
Our tool uses Linq to objects in several methods. But we have noticed that a FirstOrDefault
takes very long on collections with +/- 1000 objects.
探查还提醒该查询是很慢的。我的探查结果添加的图像。
The profiler also alerts that the query is very slow. I've added images with the profiler results.
这是不可能的集合添加到一个数据库,然后查询数据库。
任何建议?
It's not possible to add the collection to a database and then query the database. Any recommendations?
谢谢!
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;
}
图片:
的 Profile报告
推荐答案
您应该可以通过改写为
saldoPrivatiefKlantVerdeelsleutel.AfrekenPeriode.SaldoPrivatiefKlantVerdeelsleutelCollection
.Where(s => (boeking == null || (s.SaldoVerdeelsleutel != null &&
(s.SaldoVerdeelsleutel.GebouwVerdeelSleutel.ID == boeking.SaldoGebouwRekeningVerdeling.SaldoGebouwRekening.SaldoVerdeelsleutel.GebouwVerdeelSleutel.ID))) && s.PrivatiefKlant.ID == privatiefKlant)
.FirstOrDefault()
请参阅的为什么LINQ。凡(谓语)。首先()比快。首先(谓语) ?为什么这是更快的。
See Why is LINQ .Where(predicate).First() faster than .First(predicate)? for why this is faster.
这篇关于C#中的LINQ到对象 - FirstOrDefault性能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!