〜120 MBのプレーンテキストのCSVファイルを読み込むためにC#を使用しています。当初、私は行ごとにそれを読むことによって解析しましたが、最近、ファイルの内容全体をメモリに最初に読み込むことは、何倍も高速でした。 CSVにはカンマが引用符で埋め込まれているため、解析はすでにかなり遅いです。つまり、正規表現の分割を使用する必要があります。私はそれぞれの行を含む配列を取得するには、改行文字の文字列分割を行い、メモリに全体の内容を読んだ後、解析を行うために120 MBのCSVファイルのString.Split()に.NET System.OutOfMemoryExceptionがあります
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
が得られます。コンピュータに4GBのRAMが搭載されていると、メモリが急激に使い果たされるのはなぜですか?複雑なCSVをすばやく解析するためのより良い方法はありますか?
文字列はコンピュータサイエンスの謎の子です。必要な悪い、しかし私はまだ誰かがより良い方法を理解することを望む! –