Il est possible de diffuser un jeu de résultats de base de données SQL Server volumineux à l'aide de Dapper?

c# dapper sql-server stream

Question

J'ai environ 500K lignes que je dois retourner de ma base de données (s'il vous plaît ne demandez pas pourquoi: /).

Je devrai ensuite enregistrer ces résultats en XML (plus URGH :() et le ftp de ce fichier dans un endroit magique.

Je dois aussi transformer chaque ligne du jeu de résultats.

En ce moment, c'est ce que je fais avec dire .. TOP 100 résultats:

  • en utilisant la méthode Query<T> Dapper, qui met en mémoire l'ensemble du jeu de résultats
  • J'utilise ensuite AutoMapper pour convertir la base de données POCO sur mon FileResult POCO
  • Convertir en XML
  • Puis enregistrez cette collection dans le système de fichiers
  • Puis FTP

Cela fonctionne très bien pour 100 lignes, mais j'obtiens une exception Out Of Memory avec AutoMapper lorsque j'essaie de convertir les résultats 500K en une nouvelle collection.

Donc, je me demandais si je pouvais faire ça ...

  • Diffuser des données à partir de la base de données en utilisant Dapper
  • Pour chaque ligne , l'appliquer automatiquement
  • Convertir en XML
  • Résultat du flux sur le disque
  • <répéter pour chaque ligne>
  • Maintenant, ftp, ce fichier sur magic-land

J'essaie d'arrêter de tout jeter dans la RAM. Je pense que si je peux diffuser du contenu, il est plus efficace en termes de mémoire car je ne travaille que sur un seul ensemble de résultats.

Quelqu'un peut-il aider?

Réponse d'expert

en utilisant la méthode Query<T> Dapper, qui met en mémoire l'ensemble du jeu de résultats

C'est un bon travail, alors, que l'un des paramètres optionnels est un bool qui vous permet de choisir si vous voulez tamponner ou non; p

Ajoutez simplement , buffer: false à votre appel existant à la Query<T> .




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi