我有一個巨大的.csv
文件,具體爲.TAB
文件,2900萬行,文件大小約爲600 MB。我需要將其讀入IEnumerable
集合。如何用2900萬行數據讀取巨大的CSV文件使用.net
我已經試過CsvHelper
,GenericParser
,以及一些其他的解決方案,但始終以內存溢出異常結束了
請提出一個辦法做到這一點
我已經試過
var deliveryPoints = new List<Point>();
using (TextReader csvreader1 = File.OpenText(@"C:\testfile\Prod\PCDP1705.TAB")) //StreamReader csvreader1 = new StreamReader(@"C:\testfile\Prod\PCDP1705.TAB"))
using (var csvR1 = new CsvReader(csvreader1, csvconfig))
{
csvR1.Configuration.RegisterClassMap<DeliveryMap>();
deliveryPoints = csvR1.GetRecords<Point>().ToList();
}
using (GenericParser parser = new GenericParser())
{
parser.SetDataSource(@"C:\testfile\Prod\PCDP1705.TAB");
parser.ColumnDelimiter = '\t';
parser.FirstRowHasHeader = false;
//parser.SkipStartingDataRows = 10;
//parser.MaxBufferSize = 4096;
//parser.MaxRows = 500;
parser.TextQualifier = '\"';
while (parser.Read())
{
var address = new Point();
address.PostCodeID = int.Parse(parser[0]);
address.DPS = parser[1];
address.OrganisationFlag = parser[2];
deliveryPoints.Add(address);
}
}
和
var deliveryPoints = new List<Point>();
csvreader = new StreamReader(@"C:\testfile\Prod\PCDP1705.TAB");
csv = new CsvReader(csvreader, csvconfig);
while (csv.Read())
{
var address = new Point();
address.PostCodeID = int.Parse(csv.GetField(0));
address.DPS = csv.GetField(1);
deliveryPoints.Add(address);
}
在所有這些情況下,您確定您正在傳輸結果,而不是將它們全部放入列表或某些類似的內存數據結構中?例如,請顯示您正在使用的CsvHelper代碼。 –
var Points = new List(); 使用(的TextReader csvreader1 = File.OpenText(@ 「C:\ testfile的\ PROD \ PCDP1705.TAB」)) 使用(VAR csvR1 =新CsvReader(csvreader1,csvconfig)) { csvR1.Configuration.RegisterClassMap () ; deliveryPoints = csvR1.GetRecords ().ToList(); } –
Leya
請*編輯問題*而不是在代碼中放置問題。但正如我懷疑的那樣,您試圖一次加載所有數據。這不同於「我需要閱讀這個IEnumerable集合」,這意味着你可以流式傳輸。 –