2010-06-29 70 views
0

我最近买了Telerik控件。我遇到了radgrid的性能问题。Radgrid性能问题更多记录

  1. 我实现分页到radgrid控件与6000分的记录。我创建了rcom402_ItemCreated到radcombo的viewall选项。当我选择viewall时,它需要20秒将数据绑定到网格,然后浏览器卡住(Firefox 3.6.4和IE7)并显示错误(请查找附加图像)。无论如何改变viewall选项代码来快速获取数据。或者无论如何改善性能并减少记录绑定的时间。

这是我的代码。

的.aspx代码

style type="text/css"> 
    .rgPageFirst, .rgPagePrev, .rgPageNext, .rgPageLast 
    { 
     display: none !important; 
    } 
    div.RadGrid_Default .rgHeader, div.RadGrid_Default th.rgResizeCol 
    { 
     background-image: none; 
    } 
</style> 

<script type="text/javascript"> 
    function onRequestStart(sender, args) { 
     if (args.get_eventTarget().indexOf("ExportToExcelButton") >= 0 || 
       args.get_eventTarget().indexOf("ExportToWordButton") >= 0 || 
       args.get_eventTarget().indexOf("ExportToPdfButton") >= 0 || 
       args.get_eventTarget().indexOf("ExportToCsvButton") >= 0) { 

      args.set_enableAjax(false); 
     } 
    } 
</script> 

<div> 
    <tr> 
     <td colspan="2"> 
      <asp:Label runat="server" Font-Bold="true" Font-Size="14pt" ID="lblTskName"></asp:Label> 
     </td> 
    </tr> 
    <br /> 
</div> 
<div> 
    <telerik:RadScriptManager ID="RadScriptManager1" runat="server"> 
    </telerik:RadScriptManager> 
    <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server"> 
     <ClientEvents OnRequestStart="onRequestStart" /> 
     <AjaxSettings> 
      <telerik:AjaxSetting AjaxControlID="rg402"> 
       <UpdatedControls> 
        <telerik:AjaxUpdatedControl ControlID="rg402" LoadingPanelID="RadAjaxLoadingPanel1" /> 
       </UpdatedControls> 
      </telerik:AjaxSetting> 
     </AjaxSettings> 
    </telerik:RadAjaxManager> 
    <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server" Skin="Default"> 
    </telerik:RadAjaxLoadingPanel> 
    <telerik:RadGrid ID="rg402" runat="server" AutoGenerateColumns="false" Height="550px" 
     OnNeedDataSource="rg402_NeedDataSource" Width="120%" AllowPaging="True" AllowSorting="True" 
     AllowMultiRowSelection="True" EnableHeaderContextMenu="true" GridLines="None" 
     EnableHeaderContextFilterMenu="true" AllowMultiRowEdit="true" AllowFilteringByColumn="True" 
     OnPreRender="rg402_PreRender" OnItemCreated="rg402_ItemCreated" EnableViewState="false"> 
     <HeaderStyle HorizontalAlign="Center" BorderWidth="1px" Font-Bold="true" Font-Size="8pt" /> 
     <ExportSettings IgnorePaging="true" ExportOnlyData="true"> 
      <Pdf AllowModify="false" AllowPrinting="true" PageBottomMargin="" PageFooterMargin="" 
       PageHeaderMargin="" PageHeight="11in" PageLeftMargin="" PageRightMargin="" PageTopMargin="" 
       PageWidth="14in" /> 
     </ExportSettings> 
     <MasterTableView DataKeyNames="orderId" CommandItemDisplay="Top" EditMode="InPlace" 
      PageSize="30"> 
      <CommandItemSettings ShowExportToWordButton="true" ShowExportToExcelButton="true" 
       ShowExportToCsvButton="true" ShowExportToPdfButton="true" ShowAddNewRecordButton="false" /> 
      <Columns> 
       <telerik:GridClientSelectColumn UniqueName="ClientSelectColumn" HeaderStyle-Width="3%" 
        ItemStyle-Width="3%"> 
       </telerik:GridClientSelectColumn> 
       <telerik:GridBoundColumn UniqueName="sId" HeaderText="sId" DataField="sId" Visible="false"> 
       </telerik:GridBoundColumn> 
       <telerik:GridBoundColumn UniqueName="orderId" HeaderText="orderId" DataField="orderId" 
        Visible="false"> 
       </telerik:GridBoundColumn> 
       <telerik:GridBoundColumn UniqueName="Customer Name" HeaderText="Customer Name" DataField="Customer Name" 
        ReadOnly="true"> 
       </telerik:GridBoundColumn> 
       <telerik:GridBoundColumn UniqueName="Market Name" HeaderText="Market Name" DataField="Market Name" 
        ReadOnly="true"> 
       </telerik:GridBoundColumn> 
       <telerik:GridBoundColumn UniqueName="LOB" HeaderText="LOB" DataField="LOB" ReadOnly="true"> 
       </telerik:GridBoundColumn> 
       <telerik:GridBoundColumn UniqueName="Headend Name" HeaderText="Headend Name" DataField="Headend Name" 
        ReadOnly="true"> 
       </telerik:GridBoundColumn> 
       <telerik:GridBoundColumn UniqueName="Project Name" HeaderText="Project Name" DataField="Project Name" 
        ReadOnly="true"> 
       </telerik:GridBoundColumn> 
       <telerik:GridHyperLinkColumn UniqueName="Site Name" HeaderText="Site Name" DataTextField="Site Name"> 
       </telerik:GridHyperLinkColumn> 
       <telerik:GridBoundColumn UniqueName="Task Status" HeaderText="Task Status" DataField="Task Status" 
        ReadOnly="true"> 
       </telerik:GridBoundColumn> 
       <telerik:GridBoundColumn UniqueName="Plant Test Date" HeaderText="Plant Test Date" 
        DataField="Plant Test Date" ReadOnly="true"> 
       </telerik:GridBoundColumn> 
       <telerik:GridBoundColumn UniqueName="CORE CM Number" HeaderText="CORE CM Number" 
        DataField="CORE CM Number" ReadOnly="true"> 
       </telerik:GridBoundColumn> 
       <telerik:GridBoundColumn UniqueName="Req SM Imp Date" HeaderText="Req SM Imp Date" 
        DataField="Req SM Imp Date" ReadOnly="true"> 
       </telerik:GridBoundColumn> 
       <telerik:GridBoundColumn UniqueName="SM Ticket Number" HeaderText="SM Ticket Number" 
        DataField="SM Ticket Number"> 
       </telerik:GridBoundColumn> 
       <telerik:GridBoundColumn UniqueName="Sch SM Imp Date" HeaderText="Sch SM Imp Date" 
        DataField="Sch SM Imp Date"> 
       </telerik:GridBoundColumn> 
       <telerik:GridEditCommandColumn UniqueName="ECC402"> 
       </telerik:GridEditCommandColumn> 
      </Columns> 
     </MasterTableView> 
     <ClientSettings EnableRowHoverStyle="true" ReorderColumnsOnClient="false" AllowDragToGroup="false" 
      AllowColumnsReorder="True"> 
      <Scrolling AllowScroll="true" UseStaticHeaders="true" /> 
      <Selecting AllowRowSelect="True"></Selecting> 
      <Resizing AllowRowResize="true" AllowColumnResize="True" EnableRealTimeResize="True" 
       ResizeGridOnColumnResize="False"></Resizing> 
     </ClientSettings> 
     <PagerStyle Mode="NextPrevAndNumeric"></PagerStyle> 
    </telerik:RadGrid> 

cs文件...

protected void Page_Load(object sender, EventArgs e) 
{ 
    try 
    { 
     if (!IsPostBack) 
     { 
      Session["SearchRes"] = null; 
      if (Session["TaskName"] != null) 
       lblTskName.Text = Session["TaskName"].ToString(); 
      Session["FilColms"] = null; 
      Session["SortExp"] = null; 
      Session["FilExp"] = null; 
      Session["ViewAll"] = null; 
      BindGrid(); 
     } 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 
} 

private void BindGrid() 
{ 
    try 
    { 
     DataSet dsResult = new DataSet(); 

     clsSearch_BL clsObj = new clsSearch_BL(); 
     clsObj.TaskID = (string)Session["TaskID"]; 
     clsObj.CustName = (string)Session["CustName"]; 
     clsObj.MarketName = (string)Session["MarketName"]; 
     clsObj.HeadendName = (string)Session["HeadendName"]; 
     clsObj.SiteName = (string)Session["SiteName"]; 
     clsObj.TaskStatus = (string)Session["TaskStatus"]; 
     clsObj.OrdType = (string)Session["OrdType"]; 
     clsObj.OrdStatus = (string)Session["OrdStatus"]; 
     clsObj.ProName = (string)Session["ProName"]; 
     clsObj.LOC = (string)Session["LOC"]; 
     clsObj.QuoteID = (string)Session["QuoteID"]; 
     clsObj.CMNumber = (string)Session["CMNumber"]; 

     if (Session["SearchRes"] == null) 
     { 
      dsResult = clsObj.getSearchResults_BL(clsObj); 
      Session["SearchRes"] = dsResult; 
     } 
     else 
      dsResult = (DataSet)Session["SearchRes"]; 

     DataView dataView = dsResult.Tables[0].DefaultView; 
     rg402.DataSource = dsResult; 
     //rg402.DataBind(); 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 
} 

protected void rg402_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e) 
{ 
    BindGrid(); 
} 

protected void rg402_PreRender(object sender, EventArgs e) 
{ 
    rg402.MasterTableView.GetColumnSafe("RowIndicator").Display = false; 

} 

protected void rg402_ItemCreated(object sender, GridItemEventArgs e) 
{ 
    if (e.Item is GridPagerItem) 
    { 
     RadComboBox combo = (e.Item as GridPagerItem).FindControl("PageSizeComboBox") as RadComboBox; 

     // The number of items shown when all is selected 
     int allRowsCount = int.MaxValue; 

     // Remove duplicates 
     RadComboBoxItem duplicate = combo.Items.FindItemByValue(allRowsCount.ToString()); 
     if (duplicate != null) 
     { 
      duplicate.Remove(); 
     } 

     // Create a new item for showing all 
     RadComboBoxItem item = new RadComboBoxItem("All", allRowsCount.ToString()); 
     item.Attributes.Add("ownerTableViewId", e.Item.OwnerTableView.ClientID); 
     combo.Items.Add(item); 

     // Set the current pagesize as the selected value 
     combo.Items.FindItemByValue(rg402.PageSize.ToString()).Selected = true; 
    } 
+0

什么与所有的会话变量?看起来你的应用没有理由加班。 – 2010-06-29 21:00:55

回答

1

我的团队做了radgrid控件的性能测试VS其他一些功能高度第三方控件,并radgrid控件是最快的时候...所以你在控制方面做出了很好的选择。

浏览器是你的限制。你会遇到与任何控制相同的问题。一次显示超过有用数量的数据是一种不好的做法。

6000行和16列......这可能超过9兆的HTML浏览器必须解析通过你的数据网格。

不要给他们一个ViewAll选项。如果他们想要快速搜索数据,则可以添加筛选结果的搜索功能。

如果他们真的想要一次所有的数据,我所做的就是在网格附近提供一个链接,允许他们将数据中的所有网格作为Excel文件下载。

+0

我同意发送所有数据只是矫枉过正。限制自己5 - 7列,并实施我谈到的高级分页。然后,NestedViewTemplate可以为每条记录提供“更多数据”,并在模板内部拥有自己的SQLDataSource。然后,您再次针对特定数据访问数据库,而不是在一个大规模选择语句中返回ALL ROWS。 – 2010-06-29 20:59:45

0

尽管我同意@Ed B的观点,即你在网格中展示了大量数据,但我认为旧版浏览器在管理你正在呈现的内存占用情况时会遇到问题。

RadGrid中有一项新功能(截至2013年第2季度)称为虚拟化,可能会给您带来性能上的提升和“查看全部”功能。

您可以在您的radgrid控件/ ClientSettings标记添加下面的标记使电网虚拟化:

<Virtualization EnableVirtualization="true" InitiallyCachedItemsCount="2000" 
        ItemsPerView="100"/> 

您可以在线演示了解更多的功能: http://demos.telerik.com/aspnet-ajax/grid/examples/performance/virtualization/defaultcs.aspx