2011-06-21 21 views
1

私はこのパフォーマンスの問題を困惑しています。 RadGridをページングすると、瞬時に結果が得られます。ただし、列のいずれかをフィルタリングすると、クエリが完了するまでに約10秒かかり、フィルタ後に適用されるページングは​​まったく遅くなります。フィルタを削除してもパフォーマンスは上手くいく。シナリオの遅さの原因をどのように追跡できますか?

Productionは、少数のユーザーで社内でホストされているSharePoint 2010 Serverです。私は30,000レコードを含むテーブルを照会するRadGridコントロール、バージョン2009.3.1.114.35を使用しています。私はバックエンドのためにSQLにLINQを使用しています。私は生産のIEとFirefoxを使用している。私の開発マシンにはパフォーマンス上の問題はありません。

クエリが複雑ではなく、レコードのソースが非常に大きくなく、トラフィックが少ないため、問題を追跡する方法がわかりません。ここにいくつかの考えがあります:

  • LINQクエリに何か問題があります。
  • RadGridの誤用または誤解。
  • データベースが最適化されていませんか? AccessからSQL Server 2008に変換しました。
  • ネットワークの問題?

以下は私のコードです。どんな助けもありがとう。

ASPX:

 <telerik:GridTemplateColumn AllowFiltering="false" SortExpression="Marked" HeaderText="Marked" UniqueName="Marked"> 

      <ItemTemplate> 
      <asp:CheckBox 
       ID="chkbxMarked" runat="server" 
       OnCheckedChanged="ToggleRowSelection" 
       Checked='<%# Eval("Marked") %>' 
       AutoPostBack="True" /> 
      </ItemTemplate> 
     </telerik:GridTemplateColumn> 
     <telerik:GridBoundColumn DataField="NamePrefix" SortExpression="NamePrefix" AllowFiltering="false" HeaderText="Name Prefix" /> 
     <telerik:GridBoundColumn DataField="LastName" SortExpression="LastName" AutoPostBackOnFilter="true" CurrentFilterFunction="Contains" HeaderText="Last Name" /> 
     <telerik:GridBoundColumn DataField="FirstName" SortExpression="FirstName" AutoPostBackOnFilter="true" CurrentFilterFunction="Contains" HeaderText="First Name" /> 
     <telerik:GridBoundColumn DataField="MiddleName" SortExpression="MiddleName" AllowFiltering="false" HeaderText="Middle Name" /> 
     <telerik:GridBoundColumn DataField="Phone1" SortExpression="Phone1" AllowFiltering="false" HeaderText="Phone" /> 
     <telerik:GridBoundColumn DataField="Phone1Ext" SortExpression="Phone1Ext" AllowFiltering="false" HeaderText="Ext." /> 
     <telerik:GridBoundColumn DataField="Email1" SortExpression="Email1" AutoPostBackOnFilter="true" CurrentFilterFunction="Contains" HeaderText="Email" /> 
     <telerik:GridBoundColumn DataField="Profile" SortExpression="Profile" AutoPostBackOnFilter="true" CurrentFilterFunction="Contains" HeaderText="Profile" />  

    </Columns> 
</MasterTableView> 

BLL:

public IList<Person> FindAllByProfile(string profileName, int rowStart, int numRows) 
    { 
     return profileName == "All" ? _repos.FindAll(rowStart, numRows) : _repos.FindAllByProfile(profileName, rowStart, numRows); 
    } 

    public int FindAllByProfileCount(string profileName) 
    { 
     return profileName == "All" ? _repos.FindAllCount() : _repos.FindAllByProfileCount(profileName); 
    } 

リポジトリ:

public IList<Person> FindAll(int rowStart, int numRows) 
    { 
     using (PRADbDataContext db = new PRADbDataContext()) 
     { 
      var data = from p in db.persons 
        join c in db.contacts on p.PersKey equals c.PersKey into personContacts 
        from pc in personContacts.DefaultIfEmpty() 
        orderby p.Modified descending 
        select new Person() 
           { 
            Id = p.PersKey, 
            AddressId = p.AddrKey, 
            DateModified = p.Modified, 
            Email1 = p.EMail1, 
            Marked = p.Marked, 
            Phone1 = p.Phone1, 
            Phone1Ext = p.PhExt1, 
            NamePrefix = p.MrMs, 
            FirstName = p.FName, 
            LastName = p.LName, 
            MiddleName = p.MName, 
            Title = p.Title, 
            Profile = pc.ProfKey ?? "N/A" 
           }; 
      return data.Skip(rowStart).Take(numRows).ToList(); 
     } 
    } 

    public int FindAllCount() 
    { 
     using (PRADbDataContext db = new PRADbDataContext()) 
      { 
       var data = from p in db.persons 
         join c in db.contacts on p.PersKey equals c.PersKey 
         select new Person() 
         { 
          Id = p.PersKey, 
         }; 
       return data.Count(); 
      } 
    } 
+0

ちょうど好奇心の邪魔をして、減速の原因は何ですか? – StriplingWarrior

+0

@StriplingWarrior - まだ100%ではありません。私はプレーンな古いWebフォームプロジェクトを作成し、そのプロジェクトに違反しているグリッドの1つを配置し、運用サーバーから実行しました...パフォーマンスは問題ありませんでした。だから、私はSharePoint + Telerik RadGridで何かを絞り込んだと思うが、何がわからないのだろうか。 – Mike

+0

@StriplingWarrior - ここにはフォローアップの質問があります:http://stackoverflow.com/questions/6432241/performance-issues-with-sharepoint-and-telerik-radgrid-control – Mike

答えて

2

私は、クエリをエミュレートするためにLINQPadを使用してお勧めします。

  1. [SQL]タブを見ると、生成されているすべてのSQLが表示されます。問題の原因となっているSQL自体であれば、SQL Server Management Studioでプロファイルを作成し、それが長引く理由を確認することができます。
  2. DLLを読み込んで実際のメソッドを実行して、メソッドがデータを処理する方法と関係があるかどうかを確認することができます。
  3. メソッドが問題なく実行されていることが分かった場合は、telerikコントロールがメソッドを呼び出す方法に問題を絞り込むことができます。
関連する問題