我有一个JSON文件,其中包含大约2万行代码,这些代码必须读取,排序并保存到数据库中。我已经为它编写了代码,它可以按预期的方式工作,但是我的问题是,这大约需要10分钟。因此,我想知道是否有人对提高性能有什么想法?
Json:
{
"Number": 123456,
"Area": "NE01"
},
{
"Number": 123457,
"Area": "NE01"
},
以此类推。...
C#:
dynamic json = JsonConvert.DeserializeObject(File.ReadAllText(path, Encoding.UTF8));
foreach (var obj in json)
{
if (obj.Area == "NE01")
{
var o = new object
{
Number = obj.Number,
};
db.Entity.Add(obj);
continue;
}
if (obj.Area == "NE02")
{
var o = new object
{
Number = obj.Number,
};
db.Entity.Add(obj);
continue;
}
if (obj.Area == "NE03")
{
var o= new object
{
Number = obj.Number,
};
db.Entity.Add(obj);
continue;
}
if ( obj.Area== "NE04")
{
var o = new object
{
Number = obj.Number
};
db.Entity.Add(obj);
continue;
}
}
db.SaveChanges();
为使内容更清楚,面积具有四个不同的值。根据值,数字将具有指向该区域的外键。不幸的是,我不允许更改基础数据库中的任何内容。 让我知道是否需要提供更多信息。
答案 0 :(得分:1)
使用EntityFramework.Utilities可以使用批量插入,这可以加快插入速度。
类似的东西:
public class Data
{
public int Number { get; set; }
public string Area { get; set; }
}
var objects = JsonConvert.DeserializeObject<List<Data>>(File.ReadAllText(path, Encoding.UTF8))
.Select(d => new object { Number = d.Number })
.ToList();
EFBatchOperation.For(db, db.Entity).InsertAll(objects);
免责声明:代码未经测试。
答案 1 :(得分:0)
只有使用AddRange,我才可以将时间减少到一分钟多一点。这对我来说足够好。