2016-04-15 4 views
-1

Я пытаюсь создать большое приложение .Net, которое будет обрабатывать некоторые данные из базы данных (все возможные операции над базой данных, вставки, представления, сортировка, вычисления на основе строк ...).Действительно ли DataSet медленнее по сравнению с DataReader?

Я не эксперт в области ADO, и я хотел бы убедиться, что моя архитектура оптимальна. Поэтому я пытаюсь сравнить DataSet и DataReader, чтобы узнать, когда я использую этот.

Я создал таблицу макетов в Oracle, и я заполнил 2 000 000 записей. Когда я проверяю размер таблицы с помощью запроса:

select * from dba_segments where Owner = 'TESTUSER' 

Для этой таблицы я получаю что-то вроде 100 МБ.

Я прочитал в MSDN, что DataSet загружает все о таблице, в то время как DataReader - это только инструмент чтения, который быстрее.

Я пытаюсь тестирует границы каждого из них, поэтому я написал следующий код:

SQL = "Select * from HugeTable" 
Command = New OracleCommand(SQL, Me.Connection) 
TempDataAdapter = New OracleDataAdapter(Command) 
TempDataAdapter.FillSchema(DataSet, SchemaType.Source, FullTableName) 
TempDataAdapter.Fill(DataSet, FullTableName) 

Если я правильно понимаю, я exepecting последнюю строку, чтобы загрузить 100 МБ из базы данных который потребует нескольких секунд, я думаю (база данных находится на том же компьютере) Однако, когда я запускаю этот код, он мгновен (он работает в несколько сотых секунд, и я не понимаю, почему это так.

Есть что-то Мне не хватает?

+0

Почему downvoting? Что случилось с вопросом? –

+1

Не мой нисходящий канал, но подумайте над этим: Как вы думаете, что использует DataAdapter для заполнения DataSet? – Steve

+0

Извините. Я не понял вашего вопроса. –

ответ

0

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

DataReader - это «пожарный шланг», который подает вам данные, когда вы читаете их. Память эффективна, но только вперед. (DataSets заселены из Datareaders!)

Итак, я думаю, вам следует больше сосредоточиться на том, что вы намерены делать с данными, чтобы решить, как вы его читаете.

+0

Благодарим вас за ответ. На самом деле, я не пытаюсь подтвердить, что Microsoft заявила в своей документации. Я пытаюсь проверить пределы потери скорости, чтобы перейти от одного решения к другому ... Чтобы быть более конкретным, некоторые из моих таблиц будут содержать строки x и другие, вероятно, 1000 раз x. Поэтому я хотел бы знать, когда скорость потери существенна, чтобы проверить, нужно ли выбирать это решение или другое ... –

+0

Вам нужно подумать о более чем просто скорости - потребление памяти здесь тоже очень важно. Если вам не требуется 100 МБ в памяти за один раз, не делайте этого. В частности, в среде с несколькими запросами (например, на веб-сервере) несколько из них работают в то же время, потребляя столько памяти, что не будут масштабироваться. – n8wrl

+0

Да точно Скорость - Память. И снова я ищу способ проверить пределы каждого из них, а НЕ общий ответ такой: DataReader быстрее, поэтому используйте DataReader. –

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