今まで見たことのない、かなりユニークな問題に遭遇しました。
顧客には、アプリケーションサーバーとデータベースサーバーがあります。アプリケーションサーバー(win 2008)は、ASP.NETMVC3アプリを実行します。データベースサーバー(Win 2008も)はSQLServer2008を実行します。
データベースへの要求が行われるたびに、w3wp.exeのCPUは最大50〜80%になり、ネットワークトラフィックは2%(10 Gbps)に達します。これには1分ほどかかります。その後、要求されたWebページが表示されます。
実際のLinq実行時間を確認しましたが、データを取得するのに数ミリ秒しかかかりません。
ここにいる専門家の何人かが何が起こっているのかを明らかにしてくれることを願っています。もちろん、それは私のマシンで動作します。
アップデート
SQL Server Management Studio(アプリサーバー上)から実行された828行を取得するクエリでさえ、完了するまでに12秒かかります...したがって、問題はアプリではなく、データベースサーバーまたは接続のどこかにあると思います
update2 これが私が見つけた興味深いものです。
これはスローコードです:
MyAppDataContext DataContext = MyAppDataContext.CreateNewContext();
IEnumerable<Requests> Entities = DataContext.Requests;
using (profiler.Step("get data")) {
IEnumerable<Requests> dataset = from x in Entities
where x.ControleStatus == 4
orderby x.ID
select x;
}
しかし、IEnumerableをIQueryableに変更すると、コードは10倍速く実行されます。
MyAppDataContext DataContext = MyAppDataContext.CreateNewContext();
IQueryable<Requests> Entities = DataContext.Requests.AsQueryable();
using (profiler.Step("get data")) {
IQueryable<Requests> dataset = from x in Entities
where x.ControleStatus == 4
orderby x.ID
select x;
}
だから私の質問は:IEnumerableとIQueryableの間にこの大きな違いを引き起こしている可能性があるのは何ですか?