Мы использовали версию CsvHelper 12.1.2
в нашем пакете. NET Core 2.1, используя следующий код для создания файла CSV, чтобы результат можно было сохранить в Azure Хранилище BLOB-объектов:
/// <summary>
/// Build a CSV file so it can be saved to Azure Blob Storage
/// </summary>
/// <returns></returns>
private byte[] BuildCsvFileToSaveToAzureBlobStorage()
{
// get a list of data to transform into CSV
List<RVExportVehicleAndOption> data = CreateTestData.GetData(numberOfRecordsToReturn: 500000);
//get byte array so we can save to Azure Blob Storage Account
var fileBytes = ConvertDataToCsv(data);
return fileBytes;
}
/// <summary>
/// Convert data into Csv memory stream
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="dataItems"></param>
/// <returns>Memory stream of Csv data</returns>
private byte[] ConvertDataToCsv<T>(IEnumerable<T> dataItems)
{
using (var memoryStream = new MemoryStream())
{
using (var streamWriter = new StreamWriter(memoryStream, Encoding.UTF8))
{
using (var csvWriter = new CsvWriter(streamWriter))
{
// don't use double quotes around any values by default
csvWriter.Configuration.ShouldQuote = (field, context) => false;
// add double quotes around string values only
csvWriter.Configuration.TypeConverterCache.AddConverter<string>(new DoubleQuotesStringConverter());
csvWriter.WriteRecords(dataItems);
}
} // streamWriter gets flushed here.
return memoryStream.ToArray();
}
}
NB. Данные, записываемые в файл CSV, имеют большой размер> 500 000 записей.
Мы не увидели никаких проблем с этим кодом, работающим под. NET Core 2.1, но с момента обновления проекта до. NET Core 3.1 мы начали видеть OutOfMemoryException
s при вызове csvWriter.WriteRecords(dataItems);
Поможет ли это, если мы: Обновим пакет CsvHelper до последней версии (15.0.0
)? Пакетные записи, чтобы он не записывал более 500 000 записей одновременно?