为什么此Entity Framework数据库更新如此之慢?

时间:2016-01-15 02:24:45

标签: c# mysql entity-framework

我编写了一个类,用于将大量数据上传到数据库中。 foreach循环似乎很慢,每次循环迭代大约需要16ms。我可以通过哪些方式提高此操作的速度?我有41,000行要添加到已经有大约162,000行的表中。每次调用该方法时,每行41k行需要10分钟。我正在从正在解析的数千个文件的大量集合中检索此数据,因此您可以想象这将是每个文件大约4万行数据乘以数千个文件。每次10分钟,我将等待不合理的长时间上传。

我的理论是,Convert.ToInt32()可能代价高昂,但这真的是导致我迟钝的原因吗?这里的问题在我的循环中。

class Uploader
{
    public void beginUpload(List<WaterData> data)
    {
        using (var db = new RTIDBContext())
        {
            var waterData = db.Set<water_data>();

            foreach (var day in data)
            {
                var rowdata = new water_data { measurment_date = day.date.ToString(), cond = Convert.ToInt32(day.waterConductivity), temp = null };
                waterData.Add(rowdata);
            }
            db.SaveChanges();          
        }
    }
}

另外,这是我的WaterData类:

class WaterData
{
    public DateTime date { get; set; }
    public double waterConductivity { get; set; }
}

1 个答案:

答案 0 :(得分:0)

请改用AddRange以避免循环到每个条目。见link

EX:

waterData.AddRange(data);