Проблема производительности Radgrid с большим количеством записей

StackOverflow https://stackoverflow.com/questions/3144531

  •  01-10-2019
  •  | 
  •  

Вопрос

Я недавно купил Teleerik Controls. Я получаю выпуск производительности с Radgrid.

  1. Я реализовал пейджинг к Radgrid с 6000 записями. И я создал вариант по просмотру на RG402_Itemcreated в Radcombo. Когда я выбираю RESTOLL, его взятие 20 сек для привязки данных к сетке, а после того, как застрял застрял (оба Firefox 3.6.4, так и IE7) и отображают ошибку (пожалуйста, найдите прилагаемое изображение). Существует ли в любом случае, чтобы изменить код варианта VIREOLL, чтобы быстро получить данные. Или все равно могут улучшить производительность и уменьшить время привязки записей.

Вот мой код.

.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; 
    } 
Это было полезно?

Решение

Моя команда сделала тесты производительности на Radgrid VS Некоторые другие высокопоставленные 3-го контроля тренажера, и Radgrid был самым быстрым в то время ... поэтому вы сделали хороший выбор в контролях.

Браузер - это ваше ограничение. У вас будет та же проблема с любым контролем. Плохая практика, чтобы показать больше, чем сразу полезное количество данных на экране.

6000 строк и 16 столбцов ... Это, вероятно, более 9 мегаметров HTML, ваш браузер должен просто разбирать через ваш DataGrid.

Не дайте им вариант посмотру. Если они хотят быстро выполнить поиск данных, вы можете добавить возможности поиска, которые фильтруют результаты.

Если они действительно нужны все данные одновременно, то, что я делаю, предоставляет ссылку вблизи сетки, которая позволяет им загружать всю сетку в данных в качестве файла Excel.

Другие советы

Пока я согласен с @ed b, что у вас есть много данных, которые вы представляете в сетке, я думаю, что старые браузеры будут иметь проблемы с управлением следом памяти, которые вы представляете.

В Radgrid есть новая функция, доступна в Radgrid (по состоянию на квартал 2013 года), называемая виртуализацией, которая может дать вам выпуклость производительности и «просмотреть все» функцию, которую вы ищете.

Вы можете включить виртуализацию сетки, добавив следующую разметку в маркеру RadGrid / Clientsettings:

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

Вы можете узнать больше о функции в онлайн-демонстрации:http://demos.telealik.com/aspnet-ajax/grid/example/performance/virtualization/defaultc.aspx.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top