所谓lazy-Allocate,未使用前不预付内存成本
public class UserDetails
{
   protected GroupCollection u_grouplist;
   .........
   public GroupCollection GroupList
   {
      get 
      {
if (u_grouplist == null)
{
   u_grouplist = new GroupCollection();
}
return u_grouplist;
      }
   }
}
,在使用的时候再创建实例,但是在类的创建时候已经声明,难道声明不预付内存成本吗?不始终不太明白,可否帮兄弟解答一下?万分感谢

解决方案 »

  1.   

    Lazy-Allocate(缓分配)技术:未使用前不预付成本。以时间换空间的概念。
    public class class1
    {
        private MyData _data;
        public MyData Data
        {
          get{  
           if (_data == null)
                 data = new MyData();
           return _data
          }
        }
    }Pre-Allocate(预分配)技术:无须预判断的快速存取,适用于必然会存取的属性;空间换时间的概念。
    public class class1
    {
        private MyData _data;
        public class class1()
        {
           _data=new MyData();
        }    public MyData Data
        {
           get{return _data};
        }
    }
      

  2.   

    lee_wei谢谢,关键是这个时间换空间的实现原理是什么?是不是像原生的win32程序那样,声明变量的时候,只是分配很小的一块内存地址,放内存指针,当创建实例的时候,在把该实例的内存地址指针放到开始声明它的时候的那块内存区域.有谁有.net方面的内存管理机制书籍方面的书啊:)
      

  3.   

    关键是引用类型变量和引用类型对象两个东西的概念:如果你只是声明一个引用类型变量,如:
    string str;这样所占用的资源很少。
    但是当你new一个引用类型的时候,就会在托管堆上构建这个对象出来,如:
    new DataTable();
    这样才会在托管堆内存上创建一个新的DataTable,分配内存。这个就是引用类型对象。
    但这只是对引用类型的变量而言是如此……
      

  4.   

    Ivony() 我说的也只是针对引用类型的变量,那刚生命的时候,也会付出内存成本,这时候付出的内存成本,是不是我想象中的那样,只放的是创建实例后的那个object的内存地址指针?