Если SqlDataAdapter использует устройство чтения данных внутри, почему люди говорят, что использование SqlDataReader быстрее?

Я продолжаю читать, что SqlDataReaders намного быстрее, чем SqlDataAdapters, из-за их быстрой переадресации, только для чтения, по одной строке за один раз, и что они специфически быстрее, чем SqlDataAdapters, когда заполняют объект DataTable (SqlDataAdapter.Fill(DataTable)).

Тем не менее, кое-кто скажет: "Скорее всего, это не изменит то, что вы используете, потому что SqlDataAdapter использует устройство чтения данных для заполнения своей таблицы". Если это правда, как именно адаптер может быть намного медленнее, если он все равно взаимодействует с базой данных с помощью внутреннего считывателя данных?

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

Я понимаю, что вы обычно используете ридер для создания списка строго типизированных POCO, в отличие от адаптера данных, который просто заполняет таблицу. Тем не менее, мой вопрос строго о деталях разницы в производительности между этими двумя, а не о проблемах O/RM...

1 ответ

Если вы используете DataReader, вы можете реагировать на некоторую информацию при чтении первой строки и даже игнорировать остальную часть чтения.

Если вы используете DataAdapter, вы должны сначала загрузить всю таблицу, а затем прочитать первую строку, чтобы отреагировать на эту же информацию.

Другие вопросы по тегам