2009-05-22 5 views
19

У меня дебаты с другим программистом, с которым я работаю.DataTables против IEnumerable <T>

Для возврата типа базы данных, есть ли какое-либо значительное использование памяти или производительность различие, или другие недостатки, которые должны сделать кто-то избегать использования DataSets и DataTables и типов благосклонности, которые реализуют IEnumerable<T> ... или наоборот

I предпочитают возвращаемые типы, которые реализуют IEnumerable<T> (List<T>, T[] etc), потому что он более легкий, сильно типизированный для объекта при доступе к свойствам, позволяет получать более подробную информацию о базовом типе и т. д. Им требуется больше времени для настройки, если вручную использовать устройство чтения данных.

Единственная причина использовать DataTables на этот день просто лениво?

+0

платформа/язык? я думаю, что DataTable - это специфичная для платформы структура; но сделать это явным, облегчает ответ – Javier

+0

Конечно, платформа является .Net Framework (C# или vb) 2.0+ – CRice

+0

Я не думаю, что я использовал DataTable с 2009 года, они сосут – CRice

ответ

18

DataTables, безусловно, намного тяжелее, чем списки, как в требованиях к памяти, так и в времени процессора, затрачиваемом на их создание/заполнение.
Использование DataReader значительно быстрее (хотя и более подробное), чем использование DataTables (я предполагаю, что вы используете DataAdapter для их заполнения).

Это говорит ... Если это не в каком-то месте, где он действительно вопросы, вы, вероятно, хорошо так или иначе, и оба метода будет достаточно быстро, так что просто идти с тем, что более удобно в каждом случае , (Иногда вы хотите заполнить их небольшим кодом, иногда вы хотите прочитать их с небольшим кодом)

Я сам склонен использовать только DataTables, когда я привязываюсь к GridView, или когда мне нужно более одного набора результатов одновременно.

6

Использование DataTables напрямую означает привязку к основному источнику данных и тому, как оно выложено. Это не хорошо с точки зрения ремонтопригодности. Если все ваши потребности нужны, это список некоторых объектов, это все, что вам нужно дать.

9

Другим преимуществом использования классов System.Collections является то, что вы получаете лучшие параметры сортировки и поиска. Я не знаю разумного способа изменить способ сортировки или поиска DataTable; с классами коллекции, которые у вас есть, ваш класс реализует IComparable или IEquatable, и вы можете полностью настроить работу List.Sort и List.Contains.

Также со списками вам не нужно беспокоиться о DBNull, который несколько раз меня подстегнул, потому что я ожидал null и получил DBNull.

+3

Используйте DataView для сортировки и поиска. –

8

Мне также нравится факт с 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); } } 
} 
0

Я нашел с большими таблицами через sql, таблица данных была намного быстрее, чем IEnumerable. Я сбросил таблицу с 26k строк с 25 столбцами на одной странице HTML. Datatable за 3 секунды, IEnumerable занял 9 секунд. Я голосую DataTable. Все коды идентичны, кроме типа.

Смежные вопросы