什么是对象的延迟初始化?您如何做到这一点?优点是什么?
发布于 2009-06-11 00:25:34
延迟初始化是一种性能优化,您可以将对象创建推迟到真正需要它之前(可能代价高昂)。
一个很好的例子是,不要预先创建数据库连接,而是仅在需要从数据库获取数据之前创建。
这样做的关键原因是,(通常)如果您从不需要对象,则可以完全避免创建它。
发布于 2009-06-11 00:41:16
延迟初始化的概念是将对象的创建推迟到对象实际第一次使用。如果使用得当,它可以带来显著的性能提升。
就我个人而言,我在.NET 2.0中创建自己的手动ORM时使用了延迟初始化。当从数据库加载我的集合时,集合中的实际项被延迟初始化。这意味着可以快速创建集合,但只有在我需要时才加载每个对象。
如果您熟悉Singleton模式,您可能也看到过惰性初始化的实际应用。
public class SomeClassSingleton
{
private static SomeClass _instance = null;
private SomeClassSingleton()
{
}
public static SomeClass GetInstance()
{
if(_instance == null)
_instance = new SomeClassSingleton();
return _instance;
}
}
在这种情况下,直到SomeClassSingleton使用者第一次需要SomeClass实例,它才会被初始化。
发布于 2009-06-11 00:45:17
在一般的计算术语中,“懒惰评估”是指将处理过程推迟到你真正需要它的时候。主要的想法是,如果你不需要它,或者在你使用它之前,值会发生变化,你有时可以避免代价高昂的操作。
System.Exception.StackTrace就是一个简单的例子。这是一个异常的字符串属性,但直到您访问它时,它才会被实际构建。在内部,它做一些类似这样的事情:
String StackTrace{
get{
if(_stackTrace==null){
_stackTrace = buildStackTrace();
}
return _stackTrace;
}
}
这为您节省了实际调用buildStackTrace的开销,直到有人想知道它是什么。
属性是简单地提供这类行为的一种方法。
https://stackoverflow.com/questions/978759
复制相似问题