При попытке экспортировать данные в Excel (1.000.000 записей) в Web API и Angular, потоковая запись приводит к исключению нехватки памяти.
Пробное разделение таблиц данных со 100.000 записями в каждой и запись потока отдельно.Однако, когда я пытаюсь объединить поток, происходит Out Of Memory Exception
.
Возможно ли когда-либо экспортировать 1.000.000 записей в листе Excel.Я могу экспортировать до 175 000 записей.Но требуют 1.000.000.См. Фрагмент ниже.
[HttpPost]
public HttpResponseMessage DownloadExcel([FromBody]AuditRequest auditRequest)
{
HttpResponseMessage result = Request.CreateResponse(HttpStatusCode.OK);
var response = GetAuditForDownload(auditRequest);
MemoryStream streamFinal = new MemoryStream();
List<AuditRequest> auditListForBulk = new List<AuditRequest>();
foreach (AuditRequest req in response.Data)
{
req.FromDate = auditRequest.FromDate;
req.ToDate = auditRequest.ToDate;
}
DataTable table = ConvertToDataTable(response.Data);
List<DataTable> splittedtables = table.AsEnumerable()
.Select((row, index) => new { row, index })
.GroupBy(x => x.index / 100000) //integer division, the fractional part is truncated
.Select(g => g.Select(x => x.row).CopyToDataTable())
.ToList();
splittedtables.ForEach(delegate (DataTable SplitTable)
{
MemoryStream stream = new MemoryStream();
StreamWriter writer = new StreamWriter(stream);
writer.Write(ToCSV(SplitTable).ToString());
writer.Flush();
stream.Position = 0;
stream.CopyTo(streamFinal);
//byteArray = GetBytesFromDataSet(SplitTable);
//byteArrayFinal = byteArrayFinal.Concat(byteArray).ToArray();
});
result = new HttpResponseMessage(HttpStatusCode.OK) { Content = new ByteArrayContent(streamFinal.ToArray()) };
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = "File.csv"
};
return result;
}