我正在编写一个框架,用于为我的雇主的项目编写不同格式的集合。其中一种输出格式是分隔文本文件(通常称为CSV - 即使CSV并不总是用逗号分隔)。
我在ADO.net中通过OleDbConnection使用Microsoft.Jet.OLEDB.4.0提供程序。对于阅读这些文件,它非常快。但是,对于写作来说,它极其缓慢。
在一个案例中,我有一个包含160条记录的文件,每条记录有大约250个字段。创建此文件大约需要30秒,似乎是CPU绑定的。
我做了以下工作,这提供了显着的性能提升,但我想不出其他任何事情:
还有其他任何建议可以加速吗?
答案 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文件。”