.NET编写分隔文本文件

时间:2009-07-02 22:04:06

标签: c# csv

我正在编写一个框架,用于为我的雇主的项目编写不同格式的集合。其中一种输出格式是分隔文本文件(通常称为CSV - 即使CSV并不总是用逗号分隔)。

我在ADO.net中通过OleDbConnection使用Microsoft.Jet.OLEDB.4.0提供程序。对于阅读这些文件,它非常快。但是,对于写作来说,它极其缓慢。

在一个案例中,我有一个包含160条记录的文件,每条记录有大约250个字段。创建此文件大约需要30秒,似乎是CPU绑定的。

我做了以下工作,这提供了显着的性能提升,但我想不出其他任何事情:

  1. 准备一次声明
  2. 使用未命名参数
  3. 还有其他任何建议可以加速吗?

4 个答案:

答案 0 :(得分:5)

“不要使用OleDbConnection”怎么样...用TextWriter编写分隔文件非常简单(逃避一边)。阅读,CsvReader

答案 1 :(得分:1)

我已经在我的雇主那里编写了一组简单易用的小类(写入和读取CSV文件或其他具有固定字段长度的平面文件)。 我刚刚使用过StreamWriter& StreamReader类,实际上非常快。

答案 2 :(得分:0)

尝试使用System.Configuration.CommaDelimitedStringCollection,就像这里的代码一样,将对象列表打印到TextWriter。

public void CommaSeperatedWriteLine(TextWriter sw, params Object[] list)
{
    if (list.Length > 0)
    {
        System.Configuration.CommaDelimitedStringCollection commaStr = new System.Configuration.CommaDelimitedStringCollection();

        foreach (Object obj in list)
        {
            commaStr.Add(obj.ToString());
        }

        sw.WriteLine(commaStr.ToString());
    }
}

答案 3 :(得分:0)

从代码项目看一下这个LINQ to CSV库: http://www.codeproject.com/KB/linq/LINQtoCSV.aspx

我还没有用过这个,但我已经在我的参考文件中使用了大约一年了。

  

“这个库可以很容易地使用带有LINQ查询的CSV文件。”