Bonjour,
Etant bloquer sur mon problème, je me tourne vers vous.
J'ai un stringbuilder qui stock les résultats de ma requête et ce stringbuilder est stocker dans une session.
Le problème est que quand trop de résultat est renvoyé (plus d'1 million de résultats par exemple), j'ai une erreur OutOfMemory qui me sort.
Voici mon code:
Session["ContenuATelecharger"] = CsvWriter.Write(table);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| public static class CsvWriter
{
public static string Write(DataTable table)
{
if (table == null) throw new ArgumentNullException("table");
StringBuilder sb = new StringBuilder();
string val = "";
//Ecriture des entêtes
foreach (DataColumn col in table.Columns)
{
val += col.ColumnName + ";";
}
sb.AppendLine(val.Substring(0, (val.Length - 1)));
//Ecriture des lignes
foreach (DataRow row in table.Rows)
{
val = "";
foreach (Object champ in row.ItemArray)
{
val += champ + ";";
}
sb.AppendLine(val.Substring(0, (val.Length - 1)));
}
return sb.ToString();
}
} |
1 2 3 4 5 6 7 8 9 10 11
| Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = "text/csv";
Response.AddHeader("content-disposition", "attachment;filename=" + filename);
Response.Write(Session["ContenuATelecharger"].ToString());
Response.Flush();
Response.End(); |
J'ai pensé à écrire dans mon fichier en plusieurs fois, mais je ne vois pas comment le faire, car toutes mes données sont stockées dans ma session.
Je ne sais pas si j'ai été assez clair 
Aurez-vous une solution svp?
Merci
Partager