2017-11-16 18 views
2

次のクエリがあり、3000レコードでは非常に遅く、370エントリが生成されます。どのようにパフォーマンスを向上させることができますか?GroupByの実行速度が遅い

dealerResults = _results.GroupBy(x => new { x.DealerName, x.DealerId }) 
             .Select(x => new MarketingReportResults() 
             { 
              DealerId = x.Key.DealerId, 
              DealerName = x.Key.DealerName, 
              LinkedTotal = linkedLeadCores.Count(y => y.DealerId == x.Key.DealerId), 
              LeadsTotal = x.Count(), 
              SalesTotal = x.Count(y => y.IsSold), 
              Percent = (decimal)(x.Count() * 100)/count, 
              ActiveTotal = x.Count(y => y.IsActive), 
             }).ToList(); 
+4

'linkedLeadCores'の大きさはどのくらいですか? –

+3

'IQueryable <>'か 'IEnumerable <>'ですか? –

+4

'_results'とは別のクエリですか? 'linkedLeadCores'はコレクションかデータベーステーブルですか?テーブルの場合は、DealerIdにインデックスがありますか?あまりにも多くのことが不明です。 –

答えて

0

私はlinkedLeadCores.Count()_resultsのエントリが処理されるたびに全体linkedLeadCoresリストいえますループとして、ここでボトルネックになっていると思います。この仮定はあなたのコメントによっても確認されたようです。

そう...

var linkedLeadCoresCountMap = linkedLeadCores 
    .GroupBy(y => y.DealerId) 
    .ToDictionary(y => y.Key, y => y.Count()); 

を使用すると、このような_resultsで何かを実行する前に、各販売店のカウントを保持している(辞書別名)マップを作成することができ、ボトルネックを除去するために...そしてあなたが書くことができます

LinkedTotal = linkedLeadCoresCountMap.ContainsKey(x.Key.DealerId) ? 
    linkedLeadCoresCountMap[x.Key.DealerId] : 0, 
0

linkedLeadCoresGroup Joinを行うと、検索のための内部ハッシュテーブルを使用すると、あなたの問題を解決する必要があります。

var dealerResults = 
       (from r in _results.GroupBy(x => new { x.DealerName, x.DealerId }) 
       join llc in linkedLeadCores on r.Key.DealerId equals llc.DealerId into g 
       select new MarketingReportResults() 
       { 
        DealerId = r.Key.DealerId, 
        DealerName = r.Key.DealerName, 
        LinkedTotal = g.Count(), 
        LeadsTotal = r.Count(), 
        SalesTotal = r.Count(y => y.IsSold), 
        Percent = (decimal)(r.Count() * 100)/count, 
        ActiveTotal = r.Count(y => y.IsActive), 
       }).ToList(); 
+0

ありがとう、これは瞬時にプロセスを確認します。皆さんありがとうございます – Arnold

+0

@Arnold Fine、回答を受け入れてください。 – ViRuSTriNiTy

関連する問題