簡體   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