当我检查Lazy <T>
类的实现时,我看到了这个块:
[OnSerializing]
private void OnSerializing(StreamingContext context)
{
T obj = this.Value;
}
正如您所看到的,它在序列化期间强制初始化。有谁知道为什么这种行为是首选的默认行为?
答案 0 :(得分:3)
如果它没有并且你提供了lambda用于初始化,你认为它在重新序列化时会重新获得什么值? lambdas不可序列化。
答案 1 :(得分:1)
Lazy<T>
的重点是延迟评估,直到需要它为止。这可以通过在实际需要之前不计算事物来节省处理能力。当您序列化某些内容时,通常需要序列化其值,因此Lazy<T>
必须计算出 的值,以便您可以将其序列化。
答案 2 :(得分:0)
想知道是否有人有解决方法。我们在许多对象上使用了Lazy,并且除将对象放入自定义ASP.NET缓存中外,它的工作效果非常好,因为我们对象的所有Lazy类型的属性都被序列化到了具有.Value评估值的缓存中。这意味着这些懒惰的委托函数需要昂贵的“急切”加载。其中大多数是昂贵的数据库/存储库层