我知道这个问题是问了很多次,但我的问题是一个稍微不同的一个:加速读取文本文件到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