从文件C#排序和读取JSON时提高性能

时间:2019-02-14 10:02:00

标签: c# .net json performance deserialization

我有一个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();

为使内容更清楚,面积具有四个不同的值。根据值,数字将具有指向该区域的外键。不幸的是,我不允许更改基础数据库中的任何内容。 让我知道是否需要提供更多信息。

2 个答案:

答案 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,我才可以将时间减少到一分钟多一点。这对我来说足够好。