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:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Session["ContenuATelecharger"] = CsvWriter.Write(table);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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();
        }
    }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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