是否存在保存必要数据以创建对象并且仅在绝对必要时创建它的情况,是否比保持对象本身更好/更有效?
一个简单的例子:
class Bar
{
public string Data { get; set; }
}
class Foo
{
Bar bar;
readonly string barData;
public Foo(string barData)
{
this.barData = barData;
}
public void MaybeCreate(bool create)
{
if (create)
{
bar = new Bar { Data = barData };
}
}
public Bar Bar { get { return bar; } }
}
答案 0 :(得分:3)
一般来说,没有。 (如果我理解你的问题是正确的。)
分配/结构在性能方面很便宜。除非你做一些疯狂的事情,否则在设计感觉自然的时候构建你的对象 - 不要过早地优化。
答案 1 :(得分:3)
如果对象在构造上执行一些复杂的操作,例如分配系统资源,那么这是有意义的。
您有Lazy<T>
来帮助您延迟对象的实例化。除此之外,如果您需要,它还内置了线程安全性。
答案 2 :(得分:1)
是的,如果创建对象意味着填充它,并填充它,则需要进行慢速操作。
例如,
List<int> ll = returnDataFromDBVeryVerySlowly();
或
Lazy<List<int>> ll = new Lazy<List<int>>(() =>
{
return returnDataFromDBVeryVerySlowly();
});
在第一个示例中,即使您不需要,也会始终调用returnDataFromDBVeryVerySlowly
。在第二个中,只有在必要时才会调用它。这是很常见的,例如,在ASP.NET中你想要“准备好”许多“标准”数据集,但是你不希望它们被填充,除非它们是需要的并且你想把它们作为你的成员Page,以便多个方法可以访问它们(其他方法可以直接调用returnDataFromDBVeryVerySlowly
)