欢迎光临

木子屋

标题: Entity Framework批量导入数据越来越慢解决方法

作者: dnawo

日期: 2012-11-25 05:05 PM

分类: Win编程

内容: 之前有一些json数据保存在文本文件中，十几个文件，每个文件数据量差不多。昨天尝试用EF将这些数据导入到数据库，程序运行时发现处理每个文件所用的时间越来越长，代码简化如下：
复制内容到剪贴板 程序代码using (DataAnalysisContext context = new DataAnalysisContext())
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 1000; j++)
{
context.VisitLogs.Add(new VisitLog());
}
context.SaveChanges();
Console.WriteLine(i);
}
}
为找出问题的原因，对代码稍做修改，记录下各个操作所用的时间：
复制内容到剪贴板 程序代码DateTime date1, date2, date3;
using (DataAnalysisContext context = new DataAnalysisContext())
{
for (int i = 0; i < 10; i++)
{
date1 = DateTime.Now;
for (int j = 0; j < 1000; j++)
{
context.VisitLogs.Add(new VisitLog());
}
date2 = DateTime.Now;
context.SaveChanges();
date3 = DateTime.Now;
System.Console.WriteLine("Add:{0},Save:{1}", (int)(date2 - date1).TotalMilliseconds, (int)(date3 - date2).TotalMilliseconds);
}
}
输出文本：
引用内容Add:907,Save:8909
Add:5640,Save:8702
Add:10734,Save:8752
Add:15841,Save:8695
Add:20978,Save:8754
Add:26066,Save:9053
Add:31178,Save:8597
Add:36250,Save:8639
Add:41369,Save:8728
Add:46564,Save:8698
不明白为什么每千次Add的时间越来越长，换作List<VisitLog>.Add，每千次瞬间就能完成。
Entity Framework批量导入数据越来越慢解决方法
经dudu提示，对代码进行如下修改后运行正常：
复制内容到剪贴板 程序代码for (int i = 0; i < 10; i++)
{
using (DataAnalysisContext context = new DataAnalysisContext())
{
for (int j = 0; j < 1000; j++)
{
context.VisitLogs.Add(new VisitLog());
}
context.SaveChanges();
}
}

+ 查看当前日志评论 (0)

登录

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.148 ms

返回

标题: Entity Framework批量导入数据越来越慢解决方法

你没有权限发表评论

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.148 ms

返回

暂无评论

返回

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.179 ms

返回