2009-10-16 5 views
1

Так что я не вижу ответа на мой вопрос:ADO против DataSet и DataTables

Есть ли разница (производительность или иным образом) между ADO против DataSet? Если это так, что более распространено?

+1

Я думаю, что DataSets - это история, современный способ использования - использование моделей Entity. и ADO обеспечивает интерфейс низкого уровня для подключения к системам баз данных. Модели Entity значительно отличаются уровнем абстракции. –

ответ

9

ADO - это способ получения данных.

Думаю, вы смешиваете вещи здесь.

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

редактировать:

хотел также добавить, для больших наборов результатов, Generic Списки заселенных через DataReaders помогут, насколько производительность идет.

Для примера о наборах данных мне пришлось переписать отчет, на котором было занято более 9 часов. Это консольное приложение, которое создавало CSV. Во всяком случае, программист загрузил 1,4 миллиона записей в набор данных, затем сделал для каждого цикла каждую строку. Это не только приближалось к 10 часам, но и работало на 4 гигабайтах памяти.

После удаления набора данных отчет теперь проходит менее чем за 5 минут и занимает около 20 мегабайт памяти.

Просто пример.

0

ADO.NET DataReader быстрее, чем с использованием DataSet, потому что у него нет накладных расходов на создание большого количества внутренних объектов, необходимых для работы DataSet. Например, DataTable может иметь кэш данных Data.

Однако есть некоторые преимущества использования DataSet в правильном контексте. Если производительность является вашей основной целью, используйте ADO, в противном случае я рекомендую использовать Typed DataSets.

2

Ваш вопрос кажется немного странным, поскольку вы запрашиваете сравнение между ADO и DataSet (класс в ADO.NET). Было бы более разумно, если бы вы просили сравнить ADO и ADO.NET или сравнение объекта ADO RecordSet с объектом DataSet ADO.NET. Я отвечу, как будто вы спросили таким образом.

Во-первых, смотрите здесь:

Comparison of ADO and ADO.NET

Это статья Википедии подробно основные различия между этими двумя технологиями.

Самая большая вещь о ADO.NET's DataSet - это то, что можно рассматривать как полную базу данных в памяти. По общему признанию, он, вероятно, в основном используется для извлечения одного запроса или таблицы данных, однако он может содержать несколько таблиц и полный набор взаимосвязей и ограничений между этими таблицами (как и в самих СУБД!). A DataSet также является отключенным объектом. Это означает, что данные извлекаются из системы РСУБД, заполняется DataSet и соединение с базой данных может быть закрыто. Полный DataSet может быть передан в памяти между функциями, классами и компонентами и т. Д. И даже иметь одно или несколько обновлений, применяемых к нему, оставаясь «в памяти».Таким образом, весь DataSet может быть легко восстановлен обратно к исходному хранилищу данных/РСУБД, «за один раз» после восстановления соединения с базой данных. Это позволяет хранить данные в памяти в течение длительного времени, без необходимости «держать открытым» и дорогостоящим (и скудным) ресурсом, как соединение с базой данных.

Для сравнения: RecordSet ADO - это в основном представление одной таблицы (например, просмотр только одной таблицы в базе данных, а не всей самой базы данных). Это также «связанный» объект, означающий, что в то время как у вас есть заполненный RecordSet в памяти, и вы (например) повторяете его записи, вы все равно подключаетесь к внутренней базе данных. Если работа в вашей программе займет некоторое время, вы будете держать это соединение с базой данных открытым (потенциально) довольно долгое время.

Если вы ищете производительности сравнения в период между этими двумя технологиями (ADO против ADO.NET), вы можете найти одно такое сравнение здесь:

PERFORMANCE COMPARISON OF MICROSOFT'S COM ADO AND ADO.NET DATABASE CONNECTORS

3

ADO/ADO.Net является способ получения данных в базе данных или из нее.

A Dataset - это способ переноса данных.

Они не являются mutualy эксклюзивные

0

ADO является механизм/код, который извлекает данные из базы данных. Практически все операции по отправке и извлечению базы данных используют ADO.

DataSet и Datatables являются средами (или классами) для передачи данных между базой данных до точки, в которой она потребляется в приложении.

Если это не проблема, я избегаю DataSet/DataTables. Explanation почему.

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