DataTables vs IEnumerable <T>
У меня дебаты с другим программистом, с которым я работаю.
Для типа возврата базы данных существуют ли существенные различия в использовании памяти или производительности, или другие недостатки, которые должны заставить кого-то избежать использования DataSet и DataTables и использовать типы, которые реализуют IEnumerable<T>
... или наоборот
Я предпочитаю возвращать типы, которые реализуют IEnumerable<T>
(List<T>, T[] etc
), потому что он более легкий, строго типизированный для объекта при доступе к свойствам, позволяет получать более богатую информацию о базовом типе и т.д. Им требуется больше времени, чтобы настроить, вручную с помощью устройства чтения данных.
Единственная причина использовать DataTables на этот день просто лениво?
Ответы
Ответ 1
Таблицы данных, безусловно, намного тяжелее, чем списки, как в требованиях к памяти, так и в времени процессора, затрачиваемом на их создание/заполнение.
Использование DataReader значительно быстрее (хотя и более подробное), чем использование DataTables (я предполагаю, что вы используете DataAdapter для их заполнения).
Это сказало...
Если это не в каком-то месте, где это действительно, вы, вероятно, в любом случае, и оба метода будут достаточно быстрыми, поэтому просто отправляйтесь с тем, что более удобно в каждом случае. (Иногда вы хотите заполнить их небольшим кодом, иногда вы хотите прочитать их с небольшим кодом)
Я сам склонен использовать только DataTables, когда я привязываюсь к GridView, или когда мне нужно одновременно несколько активных наборов результатов.
Ответ 2
Другим преимуществом использования классов System.Collections является то, что вы улучшаете параметры сортировки и поиска. Я не знаю разумного способа изменить способ сортировки или поиска DataTable; с классами коллекции, которые у вас есть, ваш класс реализует IComparable или IEquatable, и вы можете полностью настроить работу List.Sort и List.Contains.
Также со списками вам не нужно беспокоиться о DBNull, который несколько раз подстегнул меня, потому что я ожидал null и получил DBNull.
Ответ 3
Мне также нравится, что с IEnumerable<T>
вы можете улучшить базовый тип коллекции с помощью методов и свойств, что делает реализацию намного более элегантной, а код более удобной. Например, свойство FullName. Вы также можете добавлять методы расширения к классу, если он вышел из-под контроля.
public class SomeUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string FullName { get { return String.Format("{0} {1}", FirstName, LastName); } }
}
Ответ 4
Использование DataTables напрямую означает привязку себя к базовому источнику данных и тому, как оно выложено. Это не хорошо с точки зрения ремонтопригодности. Если все ваши потребности в просмотре - это список некоторых объектов, все, что вам нужно дать.
Ответ 5
Я нашел с большими таблицами через sql, таблица данных была намного быстрее, чем IEnumerable. Я сбросил таблицу с 26k строк с 25 столбцами на одной странице HTML. Datatable за 3 секунды, IEnumerable занял 9 секунд. Я голосую DataTable. Все коды идентичны, кроме типа.