我正在使用 C# 读取约 120 MB 的纯文本 CSV 文件。最初,我通过逐行读取来进行解析,但最近确定首先将整个文件内容读入内存会快很多倍。解析已经相当慢了,因为 CSV 的引号内嵌入了逗号,这意味着我必须使用正则表达式拆分。这是我发现的唯一一个可以可靠工作的:
string[] fields = Regex.Split(line,
@",(?!(?<=(?:^|,)\s*\x22(?:[^\x22]|\x22\x22|\\\x22)*,)
(?:[^\x22]|\x22\x22|\\\x22)*\x22\s*(?:,|$))");
// from http://regexlib.com/REDetails.aspx?regexp_id=621
为了在将整个内容读入内存后进行解析,我对换行符进行了字符串分割,以获得包含每一行的数组。但是,当我对 120 MB 文件执行此操作时,我得到一个System.OutOfMemoryException
。为什么我的电脑有 4 GB RAM,但内存却很快用完?有没有更好的方法来快速解析复杂的 CSV?
除非必要,否则不要推出自己的解析器。我很幸运有这个:
快速 CSV 阅读器 http://www.codeproject.com/KB/database/CsvReader.aspx
如果没有别的事,你可以看看幕后,看看其他人是如何做的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)