title: OutOfMemoryException when creating huge string in ASP.NET
body: <p>When exporting a lot of data to a string (csv format), I get a OutOfMemoryException. What's the best way to tackle this? The string is returned to a Flex Application.</p>
  
  <p>What I'd do is export the csv to the server disk and give back an url to Flex. Like this, I can flush the stream writing to the disk.</p>
  
  <p>Update:</p>
  
  <p>String is build with a StringBuilder:</p>
  
  <pre><code>StringBuilder stringbuilder = new StringBuilder();
  string delimiter = ";";
  bool showUserData = true;
  
  // Get the data from the sessionwarehouse
  List&lt;DwhSessionDto&gt; collection 
       =_dwhSessionRepository.GetByTreeStructureId(treeStructureId);
  
  // ADD THE HEADERS
  stringbuilder.Append("UserId" + delimiter);
  if (showUserData)
  {
      stringbuilder.Append("FirstName" + delimiter);
      stringbuilder.Append("LastName" + delimiter);
  }
  stringbuilder.Append("SessionId" + delimiter);
  stringbuilder.Append("TreeStructureId" + delimiter);
  stringbuilder.Append("Name" + delimiter);
  stringbuilder.Append("Score" + delimiter);
  stringbuilder.Append("MaximumScore" + delimiter);
  stringbuilder.Append("MinimumScore" + delimiter);
  stringbuilder.Append("ReducedScore" + delimiter);
  stringbuilder.Append("ReducedMaximumScore" + delimiter);
  stringbuilder.Append("Duration" + delimiter);
  stringbuilder.AppendLine("Category" + delimiter);
  
  foreach (var dwhSessionDto in collection)
  {
      stringbuilder.Append(
          getPackageItemsInCsvFromDwhSessionDto(
              dwhSessionDto, delimiter, showUserData));
  }
  
  return stringbuilder.ToString();
  </code></pre>
  
  <p>The string is sent back to Flex like this:</p>
  
  <pre><code>var contentType = "text/csv";
  string result = exportSessionService.ExportPackage(treeStructureId);
  // Write the export to the response
  _context.Response.ContentType = contentType;
  _context.Response.AddHeader("content-disposition", 
      String.Format("attachment; filename={0}", treeStructureId + ".csv"));
  
  // do not Omit the Vary star so the caching at the client side will be disabled
  _context.Response.Cache.SetOmitVaryStar(false);
  _context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
  
  if (!String.IsNullOrEmpty(result))
  {
      _context.Response.Output.Write(result);
      _context.Response.Output.Close();
  }
  else
  {
      _context.Response.Output.Write("No logs");
  }
  </code></pre>