私はこのパフォーマンスの問題を困惑しています。 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();
}
}
ちょうど好奇心の邪魔をして、減速の原因は何ですか? – StriplingWarrior
@StriplingWarrior - まだ100%ではありません。私はプレーンな古いWebフォームプロジェクトを作成し、そのプロジェクトに違反しているグリッドの1つを配置し、運用サーバーから実行しました...パフォーマンスは問題ありませんでした。だから、私はSharePoint + Telerik RadGridで何かを絞り込んだと思うが、何がわからないのだろうか。 – Mike
@StriplingWarrior - ここにはフォローアップの質問があります:http://stackoverflow.com/questions/6432241/performance-issues-with-sharepoint-and-telerik-radgrid-control – Mike