将非常大的数据结构映射到序列化/ 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)这样做会很棒。