gpt4 book ai didi

c# - 如何使用 .net 读取包含 2900 万行数据的巨大 CSV 文件

转载 作者:太空宇宙 更新时间:2023-11-03 21:02:11 24 4
gpt4 key购买 nike

我有一个巨大的 .csv 文件,具体来说是一个包含 2900 万行的 .TAB 文件,文件大小约为 600 MB。我需要将其读入 IEnumerable 集合。

我尝试过 CsvHelperGenericParser 和其他一些解决方案,但总是以内存不足异常结束

请推荐一种方法

我试过了

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);
}

最佳答案

问题是您正在将整个文件加载到内存中。您可以将代码编译为 x64,这会迅速增加程序的内存限制,但如果可以避免将整个文件加载到内存中,则不推荐这样做。

请注意,调用 ToList() 会强制 CsvReader 立即将整个文件加载到内存中:

csvR1.GetRecords<Point>().ToList();

但这一次只会加载一行:

foreach(var record in csvR1.GetRecords<Point>())
{
//do whatever with the single record
}

这样你就可以处理无限大小的文件

关于c# - 如何使用 .net 读取包含 2900 万行数据的巨大 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44362395/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com