Так что я не вижу ответа на мой вопрос:ADO против DataSet и DataTables
Есть ли разница (производительность или иным образом) между ADO против DataSet? Если это так, что более распространено?
Так что я не вижу ответа на мой вопрос:ADO против DataSet и DataTables
Есть ли разница (производительность или иным образом) между ADO против DataSet? Если это так, что более распространено?
ADO - это способ получения данных.
Думаю, вы смешиваете вещи здесь.
A Dataset - это в основном представление памяти из данных, которые вы только что вытащили, и это нормально для меньших наборов результатов, но для чего-то большого этого, вероятно, следует избегать.
редактировать:
хотел также добавить, для больших наборов результатов, Generic Списки заселенных через DataReaders помогут, насколько производительность идет.
Для примера о наборах данных мне пришлось переписать отчет, на котором было занято более 9 часов. Это консольное приложение, которое создавало CSV. Во всяком случае, программист загрузил 1,4 миллиона записей в набор данных, затем сделал для каждого цикла каждую строку. Это не только приближалось к 10 часам, но и работало на 4 гигабайтах памяти.
После удаления набора данных отчет теперь проходит менее чем за 5 минут и занимает около 20 мегабайт памяти.
Просто пример.
ADO.NET DataReader быстрее, чем с использованием DataSet, потому что у него нет накладных расходов на создание большого количества внутренних объектов, необходимых для работы DataSet. Например, DataTable может иметь кэш данных Data.
Однако есть некоторые преимущества использования DataSet в правильном контексте. Если производительность является вашей основной целью, используйте ADO, в противном случае я рекомендую использовать Typed DataSets.
Ваш вопрос кажется немного странным, поскольку вы запрашиваете сравнение между ADO и DataSet
(класс в ADO.NET). Было бы более разумно, если бы вы просили сравнить ADO и ADO.NET или сравнение объекта ADO RecordSet
с объектом DataSet
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
ADO/ADO.Net является способ получения данных в базе данных или из нее.
A Dataset - это способ переноса данных.
Они не являются mutualy эксклюзивные
ADO является механизм/код, который извлекает данные из базы данных. Практически все операции по отправке и извлечению базы данных используют ADO.
DataSet и Datatables являются средами (или классами) для передачи данных между базой данных до точки, в которой она потребляется в приложении.
Если это не проблема, я избегаю DataSet/DataTables. Explanation почему.
Я думаю, что DataSets - это история, современный способ использования - использование моделей Entity. и ADO обеспечивает интерфейс низкого уровня для подключения к системам баз данных. Модели Entity значительно отличаются уровнем абстракции. –