OpenAccessDomainServiceのOQLクエリに大きな問題があります。OpenAccessDomainService OQLクエリの実行が非常に遅い
私はSilverlightクライアントとRIA Webサービス(OpenAccessDomainService)とのアプリケーションを持っており、遅延読み込みアプローチを実装する必要があります。
たとえば、getAnimalsLazy(string stringQuery、int range、int page)というメソッドを作成しました。ここでは、フィルタ、ページごとのレコード、およびページからstringQueryを渡すことができます。このメソッドは正常に動作しますが、劇的に遅くなります。
これを比較するには、非常に高速なメソッドgetAnimals()を作成しました。これは〜4秒で15 000レコードをロードしています。 getAnimalsLazyを実行すると、〜2秒で25レコードがロードされます。
私は何が間違っているのか分からない、誰かが私を助けることができる。
これはサンプルコードです:私はthis.DataContext.ExecuteQueryとgetAnimalsLazy(のqueryString)すべてが正常に動作をリファクタリングするとき
[EnableClientAccess()]
public partial class ZooDomainService : OpenAccessDomainService<Model.ZooDomainModel>
{
public ZooDomainService() : base()
{
}
/// <param name="stringQuery">eg. AND (r.type = "Elephant" OR r.type = "Monkey") ORDER BY r.id ASC</param>
public IQueryable<Animals> getAnimalsLazy(string stringQuery, int range, int page)
{
stringQuery = "SELECT r FROM AnimalsExtent AS r WHERE true " + stringQuery;
Database db = Database.Get("Connection");
IObjectScope scope = db.GetObjectScope();
Query<Animals> qry = scope.GetOqlQuery<Animals>(stringQuery);
int toSkip = (page - 1) * range;
qry.Skip = toSkip;
qry.MaxResultCount = range;
return qry.ExecuteEnumerable().AsQueryable<Animals>();
}
public IQueryable<Animals> getAnimals()
{
return this.DataContext.Animals;
}
}