私は、アプリ全体で使用され、1つを除くすべてのケースで非常にうまく機能する、かなり一般的なLINQクエリを作成しました。現在SQLExpressを実行しているだけなので、ダウンロードが完了するまでSQLプロファイラーにジャンプできません。それまでは、次のLINQで目立つものがあり、大幅な速度低下を引き起こしますか?
以下は、実行される内容の要約です。ホールドアップはもちろんToList呼び出しであり、30秒ほどかかります。私はすべてのグリッドビューにこのコードを使用していますが、1つだけがそれを保持しています。MyGridViewはSQLビューであり、問題のデータでは、SQLManagementStudioを介してすべての16417レコードを実行して返すのに2秒しかかかりません。最後に、データの終わり近くのページをリクエストするときはこれだけ時間がかかるので、TakeandSkipの実装にある程度関連していると思います。
private void Demo()
{
// using LINQ To Entity...
using (var entities = new MyEntities())
{
int page = 1641;
int pageSize = 10;
IQueryable<MyGridView> results = entities.MyGridView;
results = results.Where(r => r.DeletedDate == null);
var resultCount = results.Count();
results = ApplyPaging(results, page, pageSize);
// On the problem data, ToList takes a good 30 seconds to return just 10 records
var resultList = results.ToList();
}
}
private IQueryable<T> ApplyPaging<T>(IQueryable<T> data, int currentPage, int pageSize)
{
if (pageSize > 0 && currentPage > 0)
{
data = data.Skip((currentPage - 1) * pageSize);
}
data = data.Take(pageSize);
return data;
}
何か悪い、間違った、危険なものとして飛び出しますか?プロファイラーのコピーをインストールしたら、生成されたSQLを調べて、そこにヒントがあれば投稿します。