複雑な Entity Framework クエリがあります。私のパフォーマンスのボトルネックは、実際にデータベースをクエリすることではなく、IQueryable をクエリ テキストに変換することです。
私のコードは次のようなものです:
var query = context.Hands.Where(...)
if(x)
query = query.where(...)
....
var result = query.OrderBy(...)
var page = result.skip(500 * pageNumber).Take(500).ToList(); //loong time here, even before calling the DB
do
{
foreach(var h in page) { ... }
pageNumber += 1;
page = result.skip(500 * pageNumber).Take(500).ToList(); //same here
}
while(y)
私に何ができる?私は(SQLiteで)DbContextを使用しているため、プリコンパイルされたクエリを使用できません(それでも、このようなクエリ構築アルゴリズムでは面倒です)。
基本的に必要なのは、「ページ」クエリをキャッシュし、「スキップ」パラメーターと「取得」パラメーターのみを変更することです。毎回ゼロから再コンパイルする必要はありません。