“不要多次处置对象”警告来自csv导入方法

时间:2014-10-01 10:07:45

标签: c# garbage-collection dispose idisposable csvhelper

我在SO上阅读了很多有关此问题的帖子,但仍需要一些帮助才能理解这一点。

CodeAnalysis说这种方法是两次处理对象。实际上,它正在警告我这个方法中的两个对象;一次用于file.InputStream,一次用于reader对象

这是我的代码:

public void SaveCsvData(HttpPostedFileBase file, int vendorId)
        {
            var listCsvImport = new List<CsvImport>();

            try
            {
                using (var reader = new StreamReader(file.InputStream))
                using (var csvReader = new CsvHelper.CsvReader(reader))
                {

                    int count = 0;
                    while (csvReader.Read())
                    {
                        ...<snip>...

                        listCsvImport.Add(record);
                    }
                    _db.CsvImports.AddRange(listCsvImport);
                    _db.SaveChanges();
                }
...<snip>...

            }
            catch (CsvBadDataException ex)
            {
                log.Error("Invalid data in the CSV file, terminating process...");
                throw;
            }
            catch (Exception ex)
            {
                log.Error("Csv import failed, no data was saved.", ex);
                throw;
            }

        }

感谢

1 个答案:

答案 0 :(得分:2)

using (var csvReader = new CsvHelper.CsvReader(reader))已经处理了阅读器对象,因此您无需使用using (var reader = new StreamReader(file.InputStream))