![](/img/trans.png)
[英]How to import database files into solution for C# console application which uses Entity Framework
[英]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.