将分层数据对象映射到json性能优化

时间:2016-08-11 18:35:42

标签: c# json performance serialization tree

非常大的数据结构映射到序列化/ web api的其他类时,如何提高性能?

我有这个班级

interface INode
{
    string Id { get; }

    INode Parent { get; }
    MyCollection<INode> Children { get; }
}

class MyCollection<T> : IEnumerable<T> where T : INode
{
    private IDictionary<string, T> nodes;

    public MyCollection(IEnumerable<T> nodeCollection)
    {
        nodes = nodeCollection.ToDictionary(t => t.Id);
    }

    public IEnumerator<T> GetEnumerator()
        => nodes.Values.GetEnumerator();

    IEnumerator IEnumerable.GetEnumerator()
        => GetEnumerator();
}

因此,当我初始化我的树时,我递归地在集合下创建集合,并且性能损失相当大,但我想你无能为力,因为ToDictionary()方法遍历集合并花费时间。

但是当我将这个类传递给web api时,我需要先将它映射到其他类,因为否则序列化程序会告诉我有循环引用(Nodes [0] - &gt; Parent - &gt ;节点[0] - &gt;父节点 - &gt;节点[0])。所以我将我的结构递归地映射到这个类:

class DomainNode {
    public string Id { get; set; }

    public string ParentId { get; set; }
    public IEnumerable<DomainNode> Children { get; set; }
}

手动设置所有属性(暂时不使用Automapper)。

对于大数据集,性能影响非常大。当我加载一些平庸的集合时,需要7秒才能得到我的回复。有没有更快的方法?也许是黑客攻击?

如果有特殊说明如何使用Json.Net / Web.Api(Owin)这样做会很棒。

0 个答案:

没有答案