¿Es posible transmitir un gran conjunto de resultados de la base de datos de SQL Server utilizando Dapper?

c# dapper sql-server stream

Pregunta

Tengo alrededor de 500,000 filas que debo devolver desde mi base de datos (no pregunte por qué: /).

Entonces necesitaré guardar estos resultados como XML (más URGH :() y el ftp de este archivo en algún lugar mágico.

También necesito transformar cada fila en el conjunto de resultados.

En este momento, esto es lo que estoy haciendo con decir .. TOP 100 resultados:

  • utilizando el método Dapper's Query<T> , que arroja todo el conjunto de resultados en la memoria
  • Luego uso AutoMapper para convertir la base de datos POCO a mi FileResult POCO
  • Convertir a XML
  • A continuación, guarde esta colección en el sistema de archivos
  • Entonces FTP

Esto funciona bien para 100 filas, pero obtengo una excepción de Memoria agotada con AutoMapper cuando trato de convertir los resultados de 500 K a una nueva colección.

Entonces, me preguntaba si podría hacer esto ...

  • Transmitir datos desde DB usando Dapper
  • Para cada fila , automatícela
  • Convertir a XML
  • Transmitir el resultado al disco
  • <repetir para cada fila>
  • Ahora ftp ese archivo a magic-land

Estoy tratando de dejar de tirar todo a la memoria RAM. Mi idea es que si puedo transmitir cosas, es más eficiente con la memoria ya que solo trabajo en un solo conjunto de datos de resultados.

¿Alguien puede ayudar?

Respuesta experta

utilizando el método Dapper's Query<T> , que arroja todo el conjunto de resultados en la memoria

Es un buen trabajo, entonces, que uno de los parámetros opcionales sea un bool que le permita elegir entre almacenar o no;

Simplemente agregue , buffer: false a su llamada existente a Query<T> .



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué