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. Все коды идентичны, кроме типа.