FileHelpers (http://www.filehelpers.net/)로 매우 큰 CSV 파일을 구문 분석하려고합니다. 이 파일은 압축 된 1GB 및 압축 해제 된 약 20GB입니다.FileHelpers가 큰 CSV 파일을 구문 분석 할 때 OutOfMemoryException을 throw합니다.
string fileName = @"c:\myfile.csv.gz";
using (var fileStream = File.OpenRead(fileName))
{
using (GZipStream gzipStream = new GZipStream(fileStream, CompressionMode.Decompress, false))
{
using (TextReader textReader = new StreamReader(gzipStream))
{
var engine = new FileHelperEngine<CSVItem>();
CSVItem[] items = engine.ReadStream(textReader);
}
}
}
FileHelpers는 OutOfMemoryException을 발생시킵니다.
테스트 실패 : 'System.OutOfMemoryException'유형의 예외가 발생했습니다. System.OutOfMemoryException : 형식이 예외 'System.OutOfMemoryException'throw되었습니다. FileHelpers.StringHelper.ExtractQuotedString에서 System.Text.StringBuilder.Append (char 값) (AT System.Text.StringBuilder.Append (char 값, INT32 반복 횟수)에 System.Text.StringBuilder.ExpandByABlock (INT32 minBlockCharCount)에서 LineInfo 라인 에서 FileHelpers.RecordInfo.StringToRecord (LineInfo 라인)에서 FileHelpers.FieldBase.ExtractValue (LineInfo 라인)에서 FileHelpers.DelimitedField.ExtractFieldString (LineInfo 라인)에서 숯불 quoteChar 부울 allowMultiline) FileHelpers.FileHelperEngine
1.ReadStream(TextReader reader, Int32 maxRecords, DataTable dt) at FileHelpers.FileHelperEngine
1 .ReadStream (TextReader 판독기)
FileHelpers로 이처럼 큰 파일을 구문 분석 할 수 있습니까? 그렇지 않다면 누구나이 파일을 파싱하는 접근법을 권장 할 수 있습니까? 감사.
BowserKingKoopa 20GB라면 파일을 압축 해제 할 때 사용 가능한 공간이 얼마나되는지 분명히 알 수 있습니다. 40GB가 없는지 확인하기 위해 두 배가됩니다. – MethodMan
~ 20GB의 데이터를 RAM에 저장 하시겠습니까? 정말 ? – digEmAll
TextReader 대신 BinaryReader를 사용해야합니까? FileHelpers가 버퍼 크기를 처리합니까? 아니면 직접 설정해야합니까? 당신이 SQLite는 DB를 생성하지 않는 예를 들어 테이블에 그 CSV를 가져 이유는 제 생각에는 – MethodMan