【发布时间】:2011-06-08 18:00:09
【问题描述】:
我正在解析一个大的 csv 文件 - 大约 500 兆(很多行,很多列)。我只需要前两列(所以每行的第二个逗号)。另外,多个线程需要同时访问这个文件,所以我不能采取排他锁。
解决此问题的最快/最少内存消耗方法是什么?我应该看哪些课程/方法?我认为我应该尽可能保持低级 - 逐个字符,逐行阅读?
也许这是一种允许同时访问的方法?
using ( var filestream = new FileStream( filePath , FileMode.Open , FileAccess.Read , FileShare.Read ) )
{
using ( var reader = new StreamReader( filestream ) )
{
...
}
}
编辑
决定去看看http://www.codeproject.com/KB/database/CsvReader.aspx
这似乎让我能够只阅读两列然后跳到下一行。
他们还有一些基准测试显示了快速的性能和低内存配置。
【问题讨论】:
-
由于您需要使用流,因此您至少需要对该行进行锁定。否则:一个线程需要一行开始读取,第二个线程将流移动到新行......等等瞧......
-
@Andreas - 你能看看我发布到原始问题的代码吗?这是否解决了同时访问的问题?
-
同时访问很大程度上取决于您对文件所做的工作。如果他们都只是阅读,那么你的状态很好。如果其中一个需要写入文件,则存在竞争条件,您需要仔细协调读写操作。
-
@Dan - 谢谢!看来我的状态很好,因为我只从这些文件中读取。
标签: c# .net .net-4.0 csv text-parsing