为什么懒惰<;T>;在序列化期间强制初始化

本文关键字:初始化 序列化 gt lt 为什么 | 更新日期: 2023-09-27 18:25:30

当我检查Lazy <T>类的实现时,我看到了这个块:

[OnSerializing]
private void OnSerializing(StreamingContext context)  
{  
     T obj = this.Value;  
} 

正如您所看到的,它在序列化期间强制初始化。有人知道为什么这种行为被首选为默认行为吗?

为什么懒惰<;T>;在序列化期间强制初始化

如果它没有,并且您为初始化提供了lambda,您认为它在反序列化时会在哪里检索值?lambda不可序列化。

Lazy<T>的全部目的是延迟评估,直到需要为止。这可以通过在实际需要之前不计算来节省处理能力。当你串行化某个东西时,你通常想串行化它的值,所以Lazy<T>必须计算出是什么,这样你才能串行化它。

想知道是否有人有解决方法。我们在许多对象上使用Lazy,除了将对象放入自定义ASP.NET缓存之外,它的工作效果很好,因为对象的所有Lazy类型属性都已序列化到缓存中,并计算了.Value。这意味着;热切的";加载这些惰性委托函数。其中大多数是昂贵的数据库/存储库层