在C#语言中,符合公共语言规范的数据类型分为两大类:值类型(value type)和引用类型(reference type)。引用类型总是从托管堆上分配,C#的new操作符返回对象位于托管堆中的内存地址,即该内存地址指向对象占用的数据位。
在使用引用类型时需要有一些性能考虑:
(1)、内存必须从托管中分配;
(2)、每个在托管中分配的对象都有与之关联的额外附加成员必须初始化;
(3)、从托管中分配对象可能会导致执行垃圾收集。
如果代码中的每个类型都是引用类型,应用程序的性能将会大大降低。
值类型是一种“轻量级”类型,其类型实例通常分配在线程的堆栈上。表示值类型实例的变量不包含执行实例的指针,变量本身只包含实例所有的字段,操作实例时 无须解析指针引用。值类型实例不受垃圾收集器的控制,因此减少托管堆的压力,以及应用程序在整个生存期中需要垃圾回收的次数。