通常は約 4000 行を返す PetaPoco を使用して SQL クエリを実行しています。
SQLを構築するコードは次のとおりです。
var sql = PetaPoco.Sql.Builder
.Append("Select ")
.Append("Participants.ParticipantID")
.Append("From Participants")
.Append("Inner Join Organizations")
.Append("On Participants.OrgID = Organizations.OrgID")
.Append("Left Join Departments")
.Append("On Participants.DepartmentID = Departments.DepartmentID")
.Append("Where")
.Append("Participants.OrgID = @0", 6328);
.Append("and Participants.Last_Name like @0", "P%");
.Append("and ")
.Append("Participants.OrgID in ")
.Append(" (")
.Append(" Select")
.Append(" OrgID ")
.Append(" from ")
.Append(" Organizations")
.Append(" Where")
.Append(" AssociationID = @0", 318)
.Append(" )");
レコードセット全体をプルして、LINQ を使用して結果をページングすると、ページは約 250 ミリ秒でレンダリングされます。コードは次のとおりです。
List<ParticipantVMItem> PagedResult = null;
var FullResult = db.Fetch<ParticipantVMItem>(sql);
PagedResult = FullResult.Skip((PageNo - 1) * PageSize).Take(PageSize).ToList();
PetaPoco に組み込まれているページング機能を使用しようとすると、ページのレンダリングに 4200 ミリ秒以上かかります。コードは次のとおりです。
List<ParticipantVMItem> PagedResult = null;
PagedResult = db.Fetch<ParticipantVMItem>(4, 250, sql);
奇妙なことに、Glimpse と Sql Profiler は、どちらの場合も実際の SQL コマンドの実行にかかる時間がほぼ同じであることを示しています。ただし、Glimpse は、2 番目のケースでは、接続が開かれる前に遅延が発生することを示唆しています。誰でもこの動作を説明できますか?
詳細情報: Sql Server 2008R2 を実行しています