Можно ли передать большой набор данных базы данных SQL Server с помощью Dapper?

У меня есть около 500 тыс. Строк, которые мне нужно вернуть из базы данных (пожалуйста, не спрашивайте почему).

Затем мне нужно будет сохранить эти результаты в формате XML (больше URGH) и в ftp этот файл куда-нибудь волшебным.

Мне также нужно преобразовать каждую строку в наборе результатов.

Прямо сейчас, это то, что я делаю, скажем.. TOP 100 результатов:

  • используя метод Dapper Query<T>, который выбрасывает весь набор результатов в память
  • Затем я использую AutoMapper для преобразования базы данных POCO в мой FileResult POCO
  • Конвертировать в XML
  • Затем сохраните эту коллекцию в файловой системе
  • Тогда FTP

Это прекрасно работает для 100 строк, но я получаю исключение Out Of Memory с AutoMapper при попытке преобразовать результаты 500K в новую коллекцию.

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

  • Потоковые данные из БД с помощью Dapper
  • Для каждого ряда, его автомат
  • Конвертировать в XML
  • Потоковый результат на диск
  • <повторить для каждой строки>
  • Теперь ftp этот файл в волшебную страну

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

Ответ 1

с использованием метода Dapper Query<T>, который выдает весь набор результатов в память

Хорошо, что один из необязательных параметров - это bool, который позволяет вам выбирать, буферизировать или нет, p

Просто добавьте , buffer: false к существующему вызову Query<T>.