prasanna204 Ответов: 3

Как улучшить производительность gridview для большого объема данных ?


Привет друзья,

Я ищу данные с именем и идентификатором отфильтрованные данные привязаны к gridview.

Я использую событие Gridview1_PageIndexChanging для подкачки страниц.Я храню отфильтрованные данные
в viewstate и привязка данных viewstate в индексе страницы изменяются.

Datatable имеет почти 6000 + recods.

Производительность загрузки данных в gridview и изменения индекса страницы очень медленная.

как улучшить производительность загрузки gridview?

Что я уже пробовал:

grdMembers.PageIndex = e. NewPageIndex;

if (ViewState ["grdview"] ! = null)
{

DataTable Dt = (DataTable)ViewState ["grdview"];
grdMembers.Источник Данных = ДТ;
grdMembers.Привязку();
}

Mehdi Gholam

Показать меньше сведения и использования подкачки.

ZurdoDev

Пейджинг и меньшее количество данных-действительно единственные способы ускорить это. Проверьте свой sql в среде Sql Management Studio и убедитесь, что он работает как можно быстрее. \

Насколько велики ваши страницы?

jayveebishie

Используете ли вы хранимую процедуру для извлечения данных? Если да, используйте подкачку в своей процедуре магазина

The Praveen Singh

Используйте пейджинг на стороне сервера, а также оптимизируйте свой запрос, если это возможно.

Richard Deeming

Не храните 6000-запись DataTable в ViewState. Если вы это сделаете, то каждый ответ будет содержать несколько мегабайт закодированной информации. ViewState данные, которые должны быть загружены, и каждый запрос должен будет отправить все эти данные обратно на сервер.

3 Ответов

Рейтинг:
2

Atlapure Ambrish

Если вы используете хранимую процедуру для извлечения данных из базы данных, вы должны использовать разбиение на страницы, т. е. отправить номер страницы и размер страницы, а затем выбрать эти конкретные записи и вернуться при изменении индекса страницы gridview (google даст много примеров). Кроме того, вы должны создать необходимые индексы, чтобы ваш запрос выполнялся лучше. Например, если у вас нет индексов для столбцов, которые вы используете в своем запросе, то создайте индексы по мере необходимости. Столбец Name также должен иметь некластеризованный индекс.

Другой альтернативой может быть отображение последних записей, например, если у вас есть столбец timestamp в таблице, сортировка в порядке убывания по этому столбцу и возврат 1000 лучших записей.


Рейтинг:
2

CyberSaint

Использовать Подкачки

<%@ Page language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

  protected void PageDropDownList_SelectedIndexChanged(Object sender, EventArgs e)
  {

    // Retrieve the pager row.
    GridViewRow pagerRow = CustomersGridView.BottomPagerRow;

    // Retrieve the PageDropDownList DropDownList from the bottom pager row.
    DropDownList pageList = (DropDownList)pagerRow.Cells[0].FindControl("PageDropDownList");

    // Set the PageIndex property to display that page selected by the user.
    CustomersGridView.PageIndex = pageList.SelectedIndex;

  }

  protected void CustomersGridView_DataBound(Object sender, EventArgs e)
  {

    // Retrieve the pager row.
    GridViewRow pagerRow = CustomersGridView.BottomPagerRow;

    // Retrieve the DropDownList and Label controls from the row.
    DropDownList pageList = (DropDownList)pagerRow.Cells[0].FindControl("PageDropDownList");
    Label pageLabel = (Label)pagerRow.Cells[0].FindControl("CurrentPageLabel");

    if(pageList != null)
    {

      // Create the values for the DropDownList control based on 
      // the  total number of pages required to display the data
      // source.
      for(int i=0; i<CustomersGridView.PageCount; i++)
      {

        // Create a ListItem object to represent a page.
        int pageNumber = i + 1;
        ListItem item = new ListItem(pageNumber.ToString());         

        // If the ListItem object matches the currently selected
        // page, flag the ListItem object as being selected. Because
        // the DropDownList control is recreated each time the pager
        // row gets created, this will persist the selected item in
        // the DropDownList control.   
        if(i==CustomersGridView.PageIndex)
        {
          item.Selected = true;
        }

        // Add the ListItem object to the Items collection of the 
        // DropDownList.
        pageList.Items.Add(item);

      }

    }

    if(pageLabel != null)
    {

      // Calculate the current page number.
      int currentPage = CustomersGridView.PageIndex + 1;     

      // Update the Label control with the current page information.
      pageLabel.Text = "Page " + currentPage.ToString() +
        " of " + CustomersGridView.PageCount.ToString();

    }    

  }

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
  <head runat="server">
    <title>GridView PagerTemplate Example</title>
</head>
<body>
    <form id="form1" runat="server">

      <h3>GridView PagerTemplate Example</h3>

      <asp:gridview id="CustomersGridView" 
        datasourceid="CustomersSqlDataSource"   
        autogeneratecolumns="true"
        allowpaging="true"
        ondatabound="CustomersGridView_DataBound"  
        runat="server">

        <pagerstyle forecolor="Blue"
          backcolor="LightBlue"/>

        <pagertemplate>

          <table width="100%">                    
            <tr>                        
              <td style="width:70%">

                <asp:label id="MessageLabel"
                  forecolor="Blue"
                  text="Select a page:" 
                  runat="server"/>
                <asp:dropdownlist id="PageDropDownList"
                  autopostback="true"
                  onselectedindexchanged="PageDropDownList_SelectedIndexChanged" 
                  runat="server"/>

              </td>   

              <td style="width:70%; text-align:right">

                <asp:label id="CurrentPageLabel"
                  forecolor="Blue"
                  runat="server"/>

              </td>

            </tr>                    
          </table>

        </pagertemplate> 

      </asp:gridview>

      <!-- This example uses Microsoft SQL Server and connects  -->
      <!-- to the Northwind sample database. Use an ASP.NET     -->
      <!-- expression to retrieve the connection string value   -->
      <!-- from the Web.config file.                            -->
      <asp:sqldatasource id="CustomersSqlDataSource"  
        selectcommand="Select [CustomerID], [CompanyName], [Address], [City], [PostalCode], [Country] From [Customers]"
        connectionstring="<%$ ConnectionStrings:NorthWindConnectionString%>"
        runat="server">
      </asp:sqldatasource>

    </form>
  </body>
</html>


Рейтинг:
0

GKP1992

Этот это должно тебе помочь.


CHill60

Здесь ничего нет!

GKP1992

В решении вопроса, заданного в ссылке, есть 3 довольно полезные ссылки. Вопрос в чем-то похож.

CHill60

Ссылка на "это" не отображалась на устройстве, которым я пользовался, когда размещал комментарий. Мое извинение

GKP1992

Без проблем. :-)