We're using the CsvWriter to stream the content of the file to a http server to be uploaded into SQL, this works fine for relatively small files but when we try to do the same thing with a large file with 2 million records, the CsvWriter.Write blows out with out of memory exception, below is a code snippet
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(requestInfo.AddressToUse + "/" + ContactListCommand.ImportURI(columnMapping.Values, this, true) + "&requestKey=" + requestInfo.RequestKey);
request.Method = WebRequestMethods.Http.Put;
request.ContentType = "text/plain;charset=utf-16";
request.ReadWriteTimeout = int.MaxValue;
request.Timeout = int.MaxValue;
request.SendChunked = true;
CsvWriter csvWriter = new CsvWriter(request.GetRequestStream(), ',', new UnicodeEncoding(false, false));
//write the column names
foreach (DBColumn contactListField in columnMapping.Values)
csvWriter.Write(contactListField.Name.Trim());
csvWriter.EndRecord();
source.OpenConnection();
foreach (Dictionary<DBColumn, object> sourceRecord in source)
{
//only pull values from columns that are mapped
foreach (DBColumn sourceField in columnMapping.Keys)
{
object sourceValue;
if (sourceRecord.TryGetValue(sourceField, out sourceValue))
{
if (sourceValue != null)
csvWriter.Write(sourceValue.ToString().Trim());
else
csvWriter.Write(string.Empty);
}
}
csvWriter.EndRecord();
totalImported++;
}
csvWriter.Flush();
csvWriter.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();