Как я могу получить общий список из DataTable с самым низким накладным расходом?

StackOverflow https://stackoverflow.com/questions/1701539

  •  19-09-2019
  •  | 
  •  

Вопрос

Я ищу лучшие практики здесь. Извиняюсь. Я знаю, что это субъективно, но здесь много умных людей, поэтому должно быть некоторые «очень хорошие» способы сделать это.

У меня есть пользовательский объект под названием сотрудник. Этот объект имеет семь свойств, таких как имя, телефон, электронная почта и так далее. В моей базе данных SQL также есть таблица, называемая TBLEMPLOYES с семью столбцами, помеченными в некоторой степени. Моя цель - «преобразовать» результаты из запроса в общий список объектов сотрудников. Как лучше всего это сделать (самые низкие накладные расходы, быстрее)?

То, что я делаю в настоящее время, - это то, что я видел, предлагая по всей сети. Мне это не нравится, потому что я чувствую, что это замедляет нагрузку на страницу. Общие списки заставляют меня быстрее в том, что я делаю, но я не чувствую себя хорошо, когда мои клиенты платят цену.

Вот что я делаю:

List<Employee> list = new List<Employee>();
DataSet ds = Employee.searchEmployees("Byron");
foreach (DataRow dr in ds.Tables[0].Rows)
{
   list.Add(new Employee(dr));
}

У меня есть конструктор, который принимает данные (как показано), который обрабатывает материал «свойство = dr [" column "] '.

С нетерпением жду ваших мыслей.

Это было полезно?

Решение

Вкратце, глядя на код и не увидев, как он используется, я бы вернул ienumerator вместо списка. Затем вы можете использовать оператор возврата доходности, и вы не будете дважды проходить через список (один для заполнения и один для отображения).

так...

protected IEnumerable<Employee> GetEmployees ()
{
   List<Employee> list = new List<Employee>();
   DataSet ds = Employee.searchEmployees("Byron");

   foreach (DataRow dr in ds.Tables[0].Rows)
   {
       yield return new Employee(dr);
   }
}

Другие советы

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

Я бы предложил использовать или Mapper, такой как Linq2sql или Entity Framework

Причина создания списка состоит в том, чтобы пройти между функциями на стороне сервера.

Каково преимущество передачи списка, в отличие от прохождения ссылки на наборы данных или даже данных DataTable?

Помимо этих мыслей, то, что вы сейчас делаете, является стандартной процедурой для составления списка. Как вы думаете, вы могли бы ускорить это? Не приспосабливаясь к объекту сотрудника? Затем вам придется обойтись без объекта сотрудника, который, вероятно, связывался бы с вашим моделированием объекта.

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

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

Этот подход обычно будет на порядок быстрее, чем любой подход, который попадает в базу данных.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top