Possible en double:
How to efficiently write to file from SQL datareader in c#?lente, grande requête SQL de C#/ASP.NET
J'essaie actuellement de créer une application Web qui utilise l'accès en lecture seule pour permettre aux utilisateurs télécharger de gros fichiers de notre base de données. La table en question contient 400 000 enregistrements et génère un fichier .csv de 50 Mo lors de l'exportation.
Il faut environ 7s pour exécuter l'instruction "SELECT * FROM [table]" sur le serveur SQL, et environ 33s pour le faire depuis mon application web (hébergée sur un serveur différent). Cela lit toutes les données dans un objet System.Data.SqlClient.SqlDataReader.
Mon problème est que je ne peux pas convertir mon SqlDataReader en un fichier .csv. La conversion de chaque ligne du SqlDataReader en une chaîne et la sortie de cette chaîne dans un fichier ligne par ligne prend presque 2 heures, ce qui est inacceptable. Voici le code que j'utilise pour créer un fichier sur le serveur de l'application Web:
while (rdr.Read())
{
string lineout = "";
for (int index = 0; index < rdr.FieldCount; index++)
lineout += rdr[index].ToString().Replace(',', ' ') + ',';
write(lineout, filename); //uses StreamWriter.WriteLine()
}
Il doit y avoir un meilleur moyen. J'ai regardé autour et vu beaucoup de suggestions qui recommandent essentiellement de faire ce qui précède pour créer un fichier. Cela fonctionne très bien avec des tables plus petites, mais pas les deux très grandes que nous utilisons tous les jours. Quelqu'un peut-il me pousser dans la bonne direction?
Êtes-vous sûr que ce n'est pas le SQL qui est lent? – SLaks
http://stackoverflow.com/questions/9055521/how-to-e-ly-writing-to-file-from-sql-datareader-in-c – samuelesque
En supposant que vous exécutez cela sur un serveur? Comment les performances de la machine réagissent-elles lorsque vous exécutez la requête? Vous n'utilisez pas de jeux de données où que vous soyez? –