CsvHelper - OutOfMemoryException при использовании WriteRecords с. NET Core 3.1 - PullRequest
0 голосов
/ 26 февраля 2020

Мы использовали версию 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 записей одновременно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...