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

之前有一些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();
    }
}


上一篇: Photoshop通道抠图示例
下一篇: IIS6.0卸载ASP.NET v1.1.4322
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
最新日志:
评论: 0 | 引用: 0 | 查看次数: 5149
发表评论
登录后再发表评论!