Загрузка данных из представления Microsoft SQL Server с использованием ASP.NET Ядро 3.1 и ядро EF

#sql-server #asp.net-core #entity-framework-core

#sql-сервер #asp.net-core #entity-framework-core

Вопрос:

Я загружаю данные со своего контроллера в таблицу html (представление) — около 4000 записей

 public async Task<IActionResult> Index()
{
      var assignments = await _context.myData.ToListAsync();
      return View(myData);
}
  

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

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

Любые советы приветствуются.

Jono

Комментарии:

1. Не загружайте все для начала. Вы не можете отобразить строку 4K на экране, так зачем ее вообще читать? Читайте только то, что вы собираетесь отображать. Все веб-сайты используют виртуализацию подкачки или прокрутки, чтобы избежать загрузки данных, которые они не могут отобразить. Это не просто пустая трата ресурсов сервера, это значительно усложняет рендеринг страницы

Ответ №1:

У вас есть другой стиль кэширования, который вы могли бы использовать в вашем случае, ниже приведены два способа, которые я мог бы порекомендовать для вас:

  • вы можете применить кеш для своего действия с помощью ResponseCache, чтобы минимизировать обработку запросов сервером
  • вы можете кэшировать объект назначения, вот пример, как это сделать

Комментарии:

1. Гораздо лучшим вариантом было бы не загружать данные, которые в любом случае не могут быть отображены. Кэширование было бы отличным дополнением, но еще лучше не читать 4K строк, когда можно отобразить только 20

2. вы правы, но это зависит от того, как он / она организует свой cshtml, я представляю здесь несколько решений для запрета вызова его базы данных для каждого запроса.

3. Невозможно отобразить 4K строк в одном представлении, если не использовать дисплей высотой 10 м. Кэширование всех строк 4K приведет к потере оперативной памяти, и у браузера все равно будут проблемы с их отображением. Кэширование становится намного эффективнее, если вы уменьшаете объем данных, которые необходимо кэшировать.

4. Теперь я реализовал таблицу данных jquery с подкачкой. Я хочу загрузить все назначения в таблицу, чтобы администратор мог исследовать данные, используя параметры фильтрации. Проблема возникает, когда я выбираю назначение для получения более подробной информации. Это действие выполняет поиск в базе данных на основе идентификатора назначения и возвращает подробную информацию о назначении и отображает ее на другой странице просмотра. Когда я возвращаюсь к представлению индекса, он снова загружает все данные. Я показываю только 6 столбцов в таблице данных. Имя задания, название предмета, преподаватель, число учащихся, дата создания, срок выполнения и столбец aggregate.

5. @PanagiotisKanavos, он использует jquery datatable, поэтому он действительно загружает 4K строк за один снимок. В вашем случае, Джоно, если вы не хотите переписывать логику своей страницы (что я предпочитаю, потому что я согласен с Панайотисом), вам нужно, по крайней мере, иметь класс service, который инкапсулирует способ использования списка назначений, если у вас нет выбора, кроме как загружать все назначения, поэтому яя бы посоветовал вам реализовать кэш данных, и вы можете использовать кэш как для списка, так и для представления сведений