1

通常は約 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 を実行しています

4

2 に答える 2

2

PetaPoco ページング正規表現に問題があります。これは通常、長い SQL で問題になりますが、他の問題が影響を受ける可能性があります。

これは、rxOrderBy Regex を次のように置き換えることで修正できます。

public static Regex rxOrderBy = new Regex(@"\bORDER\s+BY\s+(?:\((?>\((?<depth>)|\)(?<-depth>)|.?)*(?(depth)(?!))\)|‌​[\w\(\)\.\[\]""])+(?:\s+(?:ASC|DESC))?(?:\s*,\s*(?:((?>((?<depth>)|)(?<-depth‌​&gt;)|.?)*(?(depth)(?!)))|[\w()\.[]""])+(?:\s+(?:ASC|DESC))?)*", RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Singleline | RegexOptions.Compiled);

または、API 互換性を備えた PetaPoco の大幅に拡張されたフォークである NPoco を使用します。

于 2013-08-26T01:43:07.853 に答える
0

グループ名の深さが不明であるため、ソリューションで定義された rxOrderBy は例外を発生させます。これに関する手がかりはありますか?私はこの件についてあまり詳しくありません。

于 2015-04-07T12:51:45.917 に答える