我試圖用FileHelpers(http://www.filehelpers.net/)解析一個非常大的csv文件。該文件壓縮爲1GB,解壓縮大約20GB。FileHelpers在解析大型csv文件時拋出OutOfMemoryException
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'。在在 System.Text.StringBuilder.Append(char值,的Int32 repeatCount) System.Text.StringBuilder.ExpandByABlock(的Int32 minBlockCharCount)在 System.Text.StringBuilder.Append(CHAR值) FileHelpers.StringHelper.ExtractQuotedString( LineInfo線,字符 quoteChar,布爾allowMultiline)留在在 FileHelpers.RecordInfo.StringToRecord(LineInfo線) FileHelpers.FieldBase.ExtractValue(LineInfo線) FileHelpers.DelimitedField.ExtractFieldString(LineInfo線)在 FileHelpers.FileHelperEngine
1.ReadStream(TextReader reader, Int32 maxRecords, DataTable dt) at FileHelpers.FileHelperEngine
1 .ReadStream(TextReader閱讀器)
是否有可能使用FileHelpers解析這個大文件?如果沒有人可以推薦一種解析文件的方法這麼大嗎?謝謝。
BowserKingKoopa我的第一個問題是顯而易見的,當你解壓縮文件的時候有多少可用空間,如果它是20GB我會加倍看看你是否有40GB的空閒空間 – MethodMan 2013-03-05 20:32:55
你想把大約20GB的數據放入RAM中嗎?真的嗎? – digEmAll 2013-03-05 20:34:48
不應該使用BinaryReader而不是TextReader嗎? FileHelpers處理緩衝區大小還是你需要設置以及自己..? – MethodMan 2013-03-05 20:35:27