我正在使用 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?