【问题标题】:'Do not dispose objects multiple times' warning from csv import method [duplicate]来自csv导入方法的“不要多次处理对象”警告[重复]
【发布时间】:2014-10-01 10:07:45
【问题描述】:

我阅读了很多关于 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;
            }

        }

谢谢

【问题讨论】:

  • 您是否缺少{...}using (var reader...
  • 这可能是由于 CsvReader 处理了 reader,所以你不需要 2 个 using 语句。这假设您的实际代码编译不同于您发布的代码。
  • @DavidG 不,先生,如果你想嵌套它们,可以使用这样的语句堆叠。好消息是,如果出现问题,他们都会按照它们发生的顺序进行处理
  • @JBenjamin 是的,你可以做到,但一般建议不要这样做。

标签: c# garbage-collection dispose idisposable csvhelper


【解决方案1】:

using (var csvReader = new CsvHelper.CsvReader(reader)) 已经处理了 reader 对象,所以你不需要使用using (var reader = new StreamReader(file.InputStream))

【讨论】:

  • 是什么让你认为第一行配置reader
  • @DavidG '不要多次处理对象'警告,也许?
  • 老问题/答案,我知道。但以下 GitHub 问题证实了 CsvReader 处理传入的 StreamReader github.com/JoshClose/CsvHelper/issues/396 的行为(我个人会处理 StreamReader 而不是 CsvReader,除非同时实例化两者。)
猜你喜欢
  • 1970-01-01
  • 2014-04-10
  • 2019-11-05
  • 2018-07-22
  • 1970-01-01
  • 1970-01-01
  • 2014-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多