.net 引用类型和值类型

CLR支持两种类型:引用类型和值类型。虽然FCL中大多数类型都是引用类型,但程序员用的最多的还是值类型。引用类型总是从托管堆上分配的,C#的new操作符会返回对象的内存地址——也就是指向对象数据的内存地址。使用引用类型时,必须注意到一些性能问题。首先考虑以下事实。
1,内存必须从托管堆上分配。
2,堆上分配的每个对象都有一些额外的成员,这些成员必须初始化。
3,对象中的其他字节(为字段而设)总是设为零。
4,从托管堆上分配一个对象时,可能强制执行一次垃圾收集操作。

如果所有类型都是引用类型,应用程序的性能将显著下降。设想假如每次使用一个Int32值时,都进行一次内存分配,性能会受到多么大的影响!为了提升简单的、常用的类型的性能,CLR提供了名为“值类型” 的轻量级类型。值类型的实例一般在线程栈上分配(虽然也可作为字段嵌入一个引用类型的对象中)。在代表值类型实例的一个变量中,并不包含一个指向实例的指针。相反,变量中包含了实例本身的字段。由于变量已经包含了实例的字段,所以为了操作实例中的字段,不再需要提领一个指针。值类型的实例不受垃圾回收器的控制。因此,值类型的使用缓解了托管堆中的压力,并减少了一个应用程序在其生存期内需要进行的垃圾回收次数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值