C# SQL-запрос отстает
Я разработал приложение, которое манипулирует данными из базы данных. Когда я запускаю приложение со своего ПК или компьютеров, находящихся рядом со мной (в моей компании, на том же сервере), оно работает нормально, но когда кто-то из той же компании, но с другого сервера (другой страны) пытается сделать то же самое, у него огромная задержка,
Я знаю, что запрос это немного "много":
SqlCommand command = new SqlCommand("SELECT * FROM dbo.Person", con)
Больше данных -> больше лагов
Но мне нужны все данные из базы данных, чтобы заполнить ListView, а затем экспортировать в документ Excel.
Вещи, которые я пробовал:
Я создал фонового работника, который будет выполнять эту команду, и когда работник завершит работу, я заполняю ListView такими данными:
private void ViewAllWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
while (Oreader.Read())
{
ListViewItem item = new ListViewItem(Oreader["ID"].ToString());
item.SubItems.Add(Oreader["DecadeOfBirth"].ToString());
// etc
}
}
Что бы вы сделали в этом случае? Что может помочь уменьшить отставание? какой правильный подход?
2 ответа
Единственный правильный способ исправить это - уменьшить объем данных, которые вы возвращаете пользователю.
Позволь мне привести пример:
- Ваша таблица содержит много строк, которые нужно экспортировать
- Пользователь хочет просмотреть данные, а затем экспортировать их в Excel
- Разрешить пользователю видеть частичные данные
- Топ N записей
- Фильтры (по имени пользователя, отделу, дате и т. Д.)
- Пагинация (пропустить, взять)
- Пользователь доволен увиденным, а затем хочет экспортировать все данные
- Вы запускаете это на сервере и просто даете пользователю обратную связь о прогрессе
Если ваше приложение основано на IIS(например, ASP.NET), вы можете использовать Application Object и сохранить все данные из таблицы "Person" один раз при запуске приложения.