我知道這個問題是問了很多次,但我的問題是一個稍微不同的一個:加速讀取文本文件到sql表的最佳方法?
我要求如下:
我有一個文本文件,大約50000行和該文件差不多是10 MB。
每一行都有值具有固定尺寸如下:
0001 abcdefgh 1234567 xyz
0002 pqrst 02233 abc
003 asddfd 545 slfkk
它不是一個製表符分隔或逗號分隔等
我有一個SQL表與如下相同的結構:
code varchar(5)
name varchar(18)
phone varchar(16)
address varchar(20)
我必須完成的是當客戶點擊按鈕時,它應該清空sql表並從文本文件中讀取新記錄(因爲這是一個ASP.net應用程序ication,我使用WCF服務來讀取文件並將字符串傳遞給服務器,並且它的工作正常)。
用於分離和保存到數據庫的代碼如下:
Service1Client client = new Service1Client();
string data = client.ReadFile(@"C:\testfolder\test.txt");
context.Database.ExecuteSqlCommand(@"DELETE FROM table1");
table1 c;
using (StringReader reader = new StringReader(data))
{
string line = "";
while ((line = reader.ReadLine()) != null)
{
c = new table1();
c.Code = line.Substring(0, 5).Trim();
c.name= line.Substring(5, 18).Trim();
c.phone= line.Substring(23, 16).Trim();
c.address = line.Substring(39, 20).Trim();
context.table1.Add(c);
}
}
context.SaveChanges();
}
client.Close();
但這種方法需要至少30分鐘複製所有記錄。有沒有更好的方法來加速這一點?
謝謝
並使用SqlBulkCopy。我敢打賭,沒有時間用於閱讀 - 只有幾秒鐘。在table1.Add中使用了這個時間(AddRows在很多行中變慢)和SaveChanges(10.000個插入),而不是在讀取循環中。 – TomTom
是的,我只是注意到它已經在內存中。雖然 – Johan
我可以做的是對批量插入達成一致,但他可以對該代碼塊執行性能分析,以確定性能瓶頸所在,然後向我們報告我們可以在哪裏嘗試對其進行優化。 – Johan