Как загрузить 1000+ элементов в asp: GridView из БД SQL Server с высокой эффективностью - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть функция, подобная приведенной ниже, которую я использую для возврата gridview (id: dgmenu) конечным пользователям в зависимости от их роли.Обратите внимание, что я не могу применять нумерацию страниц к gridView, все элементы должны отображаться на одной странице.

protected DataTable MenuForUserRole(string userRole) {
  DataTable dtMenus = new DataTable();
  string connectionString = constr;
  try {
    using(SqlConnection cnn = new SqlConnection(connectionString)) {
      cnn.Open();
      string query = @"Select mycolumn1, mycolumn2, mycolumn3, mycolumn4m mycolumn5
                       From mytable
                       Where mykey = (select thekey from anothertable where role = @role)
                       order by myOrderColumn;
                       ";

      SqlCommand oCmd = new SqlCommand(query, cnn);
      oCmd.Parameters.AddWithValue("@role", userRole);

      using(SqlDataAdapter a = new SqlDataAdapter(oCmd)) {
        a.Fill(dtMenus);
      }

      cnn.Close();
    }
  } catch (Exception ex) {
    throw;
  }
  return dtMenus;
}

Использование:

dgMenu.DataSource = MenuForUserRole(ddlUserRoles.SelectedItem.Value.ToString());
dgMenu.DataBind();

Моя проблема связана с производительностью: некоторыеиз возвращенных GridViews содержит более 1000 элементов, поэтому загрузка полного gridView для этих пользователей занимает 5-6 секунд, что недопустимо.Когда я выполнял поиск в Интернете, я не мог найти более эффективный код для загрузки gridView из базы данных SQL Server.Буду признателен за любую помощь или совет, которые могут увеличить скорость загрузки при большом количестве данных для вида сетки.

Используется -> Visual Studio 2017 & SQL Server 2017

Ответы [ 2 ]

0 голосов
/ 27 сентября 2019

Профилируйте свой код.Понять, где большую часть времени проводит.Это может быть SQL Server, это может быть передача по сети, это может быть привязка данных к элементу управления.Если это SQL Server, нам нужно увидеть вашу схему, чтобы сообщить, как можно улучшить производительность.Мол, у вас есть индекс на mykey?Кстати, не называйте это ключом , ключ - это то, что однозначно идентифицирует запись, что, очевидно, здесь не так.

0 голосов
/ 27 сентября 2019

Самый эффективный способ - понять, что это плохая идея.

1000 записей - это слишком много для любого пользователя, с которым имеешь дело.1-2 порядка на много.На этой планете нет человека, который мог бы работать с таким большим количеством данных одновременно.Эти данные должны быть отфильтрованы, сгруппированы или разбиты на страницы в порядке больше, прежде чем они появятся перед пользователем.

И это все операции, которые вы не должны выполнять после запроса.Это должно быть сделано в самом запросе.Извлечение данных, которые вы не хотите выполнять, фильтруя позже, просто добавляет тон загрузки сети, добавляет условия гонки, блокировки базы данных и в любом случае значительно медленнее (СУБД действительно хороши в своей работе!).Хуже того, ASP.Net и его общая память могут быстро привести к проблемам с памятью .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...