0

次の LINQ ステートメントを最適化するのに役立ちます。私は ORM として Hibernate を使用しています。このステートメントの実行には 1 分以上かかります。そんなに時間はかからないはずです。

 var inValidIntroductionDates = environment.IntroductionDateInfo.IntroductionDateDetails
                                .OrderByDescending(x => x.ApplicationDate)
                                .Where(x => x.VaccineDetail.Id == vaccine.Id &&
                                            x.ViewInfo.Id == viewInfoDetail.ViewInfo.Id &&
                                            x.MasterForecastInfo.Id == scenarioId &&
                                            x.IsIntroductionDateValid == false)
                                .ToList();

ありがとう

4

3 に答える 3

1

考慮すべき事項:

  • プロファイラーをデータベースに添付して、データベースに送信される正確なステートメントを教えてください
  • ステートメントの実行が遅いかどうか、または nHibernate の処理に時間がかかるかどうかを調べます
  • データベース クエリの場合: ステートメントの最適化 (インデックス、実行計画など)
  • 実行されるクエリが多すぎる場合: n+1 と戦う
  • nHibernate 実行の場合: nHibernate ロギングをオフにします

ポイントを教えてください。

よろしく、マイケル

于 2013-04-26T12:49:28.397 に答える
1

Where節を前に移動OrderByDescendingして、order by ステートメントに含まれるレコードの数を減らします。お気に入り

var inValidIntroductionDates = environment.IntroductionDateInfo.IntroductionDateDetails
                               .Where( x => x.VaccineDetail.Id == vaccine.Id && 
                                     x.ViewInfo.Id == viewInfoDetail.ViewInfo.Id && 
                                     x.MasterForecastInfo.Id == scenarioId && 
                                     x.IsIntroductionDateValid == false)
                                .OrderByDescending(x => x.ApplicationDate)
                                .ToList();

また、あなたは変更することができます

 x.IsIntroductionDateValid == false

 !x.IsIntroductionDateValid 

しかし、それではパフォーマンスが向上しません。ただの読みやすさのオプション。

于 2013-04-26T06:34:25.790 に答える
1
var inValidIntroductionDates = environment.IntroductionDateInfo.IntroductionDateDetails.Where(
                        x => x.VaccineDetail.Id == vaccine.Id && x.ViewInfo.Id == viewInfoDetail.ViewInfo.Id && x.MasterForecastInfo.Id == scenarioId && x.IsIntroductionDateValid == false).OrderByDescending(x => x.ApplicationDate).ToList();

まず見つけてから注文する

于 2013-04-26T06:35:43.713 に答える