У меня есть около 500 тыс. Строк, которые мне нужно вернуть из базы данных (пожалуйста, не спрашивайте почему).
Затем мне нужно будет сохранить эти результаты в формате XML (больше URGH) и в ftp этот файл куда-нибудь волшебным.
Мне также нужно преобразовать каждую строку в наборе результатов.
Прямо сейчас, это то, что я делаю, скажем.. TOP 100
результатов:
- используя метод Dapper
Query<T>
, который выбрасывает весь набор результатов в память - Затем я использую AutoMapper для преобразования базы данных POCO в мой FileResult POCO
- Конвертировать в XML
- Затем сохраните эту коллекцию в файловой системе
- Тогда FTP
Это прекрасно работает для 100 строк, но я получаю исключение Out Of Memory с AutoMapper при попытке преобразовать результаты 500K в новую коллекцию.
Итак, мне было интересно, смогу ли я сделать это...
- Потоковые данные из БД с помощью Dapper
- Для каждого ряда, его автомат
- Конвертировать в XML
- Потоковый результат на диск
- <повторить для каждой строки>
- Теперь ftp этот файл в волшебную страну
Я пытаюсь перестать бросать все в оперативную память. Я думаю, что если я могу передавать потоковые данные, это более эффективно использует память, поскольку я работаю только с одним результирующим набором данных.