سؤال

لقد اشتريت مؤخرًا عناصر التحكم في Teleerik. أحصل على مشكلة في الأداء مع Radgrid.

  1. لقد قمت بتنفيذ الترحيل إلى Radgrid مع 6000 سجل. لقد قمت بإنشاء خيار ViewAll على RG402_ItemCreated إلى Radcombo. عندما أقوم بتحديد ViewAll ، أخذ 20 ثانية لربط البيانات بالشبكة وبعد ذلك يتعثر Brower (كل من Firefox 3.6.4 و IE7) وعرض الخطأ (يرجى العثور على الصورة المرفقة). هل هناك على أي حال لتغيير رمز خيار العرض للحصول على البيانات بسرعة. أو هل هناك على أي حال لتحسين الأداء وتقليل وقت ربط السجلات.

ها هو الكود الخاص بي.

.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 مقابل بعض عناصر التحكم في الطرف الثالث المميز للغاية ، وكان Radgrid أسرع في ذلك الوقت ... لذلك قمت باختيار جيد في عناصر التحكم.

المتصفح هو قيودك. سيكون لديك نفس المشكلة مع أي تحكم. إنها ممارسة سيئة لإظهار أكثر من كمية مفيدة من البيانات على الشاشة مرة واحدة.

6000 صف و 16 عمودًا ... ربما يزيد هذا عن 9 ميج من HTML الذي يجب أن يحلى به متصفحك من خلال بياناتك فقط.

لا تعطيهم خيار عرض. إذا كانوا يريدون البحث من خلال البيانات بسرعة ، فيمكنك إضافة إمكانيات البحث التي تقوم بتصفية النتائج.

إذا كانوا يريدون حقًا جميع البيانات في وقت واحد ، فإن ما أقوم به هو توفير رابط بالقرب من الشبكة يسمح لهم بتنزيل جميع الشبكة في البيانات كملف Excel.

نصائح أخرى

على الرغم من أنني أتفق مع @ED B أن لديك الكثير من البيانات التي تقدمها في الشبكة ، أعتقد أن المتصفحات القديمة ستواجه مشاكل في إدارة بصمة الذاكرة التي تقدمها.

هناك ميزة جديدة متوفرة في Radgrid (اعتبارًا من Q2 2013) تسمى الافتراضية التي قد تمنحك ميزة أداء الأداء و "عرض All" التي تبحث عنها.

يمكنك تمكين المحاكاة الافتراضية للشبكة عن طريق إضافة الترميز التالي في ترميز RadGrid/Clientsettings:

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

يمكنك معرفة المزيد حول الميزة في العرض التوضيحي عبر الإنترنت:http://demos.telerik.com/aspnet-ajax/grid/examples/performance/virtualization/defaultcs.aspx

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top