私は約65,000レコードのデータでグループ化するのに約1分かかるLINQクエリがあります。さらに最適化して時間を短縮する方法はありますか?パフォーマンスの最適化によるコレクションコレクション
var grouped = (from T1 in dataCollection.trancollection
group T1 by new { T1.Name, T1.ExternalID, T1.AccountNumber, T1.Code, T1.Location, T1.Date, T1.CurrencyCode, T1.StatusName } into g
select new
{
Id = g.Key,
groupedDocs = g,
Amount = g.Sum(x => x.TranAmount),
USDAmt = g.Sum(x => x.USDTranAmount)
}).ToList();
このコレクションへのデータは、別のAPI呼び出しによって供給されます。パフォーマンスを向上させるための代替アプローチはありますか?私のコレクションタイプはIReadOnlyCollectionです。<>
ありがとうございました!
ことができますが、多分少ない性質でグループ、ちょうど 'ExternalID'ですか? – Slai
これは、あなたが 'groupedDocs = g'を求めているので、これがあなたのORMにグループキーのための1つのクエリを作成させ、グループごとの* 1つのクエリ(N + 1問題としても知られる) 。とにかくすべての行をロードしているので、必要なフィールド(グループに入っているフィールド)と 'TranAmount'と' USDTranAmount'フィールドを選択し、メモリ内でグループ化するほうがパフォーマンスが良いかもしれません。 – Rob
あなたは、どの時点で多くの時間がかかったのかを知る必要があります。 APIまたはLINQを呼び出します。 まず、LINQなしですべてのデータをAPIから取得しましょう。 – hiule