~ 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
, 나는 각 행을 포함하는 배열을 얻을 수있는 개행 문자에 문자열 분할을 수행이 안정적으로 작동 내가 찾은 유일한 하나입니다. 그러나 120MB 파일에서이 작업을 수행하면 System.OutOfMemoryException
이됩니다. 컴퓨터에 4GB RAM이있을 때 메모리가 너무 빨리 소모되는 이유는 무엇입니까? 복잡한 CSV를 신속하게 구문 분석 할 수있는 더 좋은 방법이 있습니까?
문자열은 컴퓨터 과학의 나쁜 자식입니다. 필요한 악,하지만 나는 여전히 누군가가 더 좋은 길을 찾아 낼 수 있기를 바란다. –