2009-07-02 61 views
2

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

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

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

我也做了以下内容,其中规定显著的性能提升,但我想不出别的:

  1. 准备语句一次
  2. 使用未命名参数

任何其他建议加快这一些?

+0

肯定会看到一些代码来提供任何帮助。我有一些C#代码编写CSV文件,没有看到性能接近这个低点。 – marcc 2009-07-02 22:07:27

回答

5

“不使用OleDbConnection”......如何使用TextWriter编写分隔文件非常简单(避开旁边)。阅读时,CsvReader

+0

我写了自己的转义代码和StreamWriter。似乎目前运行良好......仍然使用OLEBB进行阅读,没有任何性能问题,我可以看到。 – 2009-07-24 04:50:04

1

我在我的雇主写了一个小而简单的类来做这件事(写和读CSV文件或其他固定字段长度的平面文件)。 我刚刚使用StreamReader类StreamWriter &,实际上它非常快。

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()); 
    } 
} 
0

在这个LINQ到CSV库从代码项目请看: http://www.codeproject.com/KB/linq/LINQtoCSV.aspx

我没有用过这个,但是我现在已经在我的参考文件有它大约一年。

“这个库使得使用CSV文件和LINQ查询变得很容易。”