4

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

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

如您所见,它在序列化期间强制初始化。有谁知道为什么默认首选这种行为?

4

3 回答 3

4

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

于 2013-07-29T10:03:46.000 回答
2

a 的全部意义Lazy<T>在于延迟评估直到需要它。这可以通过在您真正需要之前不计算事物来节省您的处理能力。当您序列化某些东西时,您通常希望序列化它的值,因此Lazy<T>必须弄清楚该值什么,以便您可以序列化它。

于 2013-07-29T10:09:20.050 回答
0

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

于 2020-11-04T00:18:14.520 回答