繁体   English   中英

如何使用 C# 和 Entity Framework 将一个大的 csv 文件导入到数据库中?

[英]How to import a big csv file into database with C# and Entity Framework?

我正在使用一个基本的流阅读器来遍历一个大约 65gb(4.5 亿行)的 csv 文件。

using (sr = new StreamReader(currentFileName))
{
    string headerLine = sr.ReadLine(); // skip the headers

    while ((string currentTick = sr.ReadLine()) != null)
    {
        string[] tickValue = currentTick.Split(',');
        // Ticks are formatted and added to the array in order to insert them afterwards.
    }
}

这将创建一个列表,该列表将保存属于蜡烛的报价,然后调用 insertTickBatch function。

    private async static Task insertTickBatch(List<Tick> ticks)
    {
        if (ticks != null && ticks.Any())
        {
            using (DatabaseEntities db = new DatabaseEntities())
            {
                db.Configuration.LazyLoadingEnabled = false;
                int currentCandleId = ticks.First().CandleId;
                var candle = db.Candles.Where(c => c.Id == currentCandleId).FirstOrDefault();

                foreach (var curTick in ticks)
                {
                    candle.Ticks.Add(curTick);
                }

                await db.SaveChangesAsync();
                db.Dispose();
                Thread.Sleep(10);
            }
        }
    }

然而,这需要大约 15 年的时间才能完成,我的意图是加快速度。 我如何实现这一目标?

我不确定您使用的是哪个 EF,但如果可用,请尝试使用此方法代替您的 foreach 循环:

 db.Ticks.AddRange(ticks);
            

此外,CSVHelper 是一个不错的 package,它可以将您的整个文件转换为 Tick object 列表,当然 Thread.Sleep 必须为 go。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM