泛型(五)代码爆炸

含义:在使用泛型类型参数的方法在进行JIT编译时,CLR获取方法的IL,用指定的类型实参进行替换,然后创建恰当的本地代码,这是泛型的主要特性之一。
 
然而有一个缺点,CLR要为每种不同的方法/类型组合生成本地代码,我们将这种现象称之为代码爆炸(code explosion),它会使应用程序的工作集显著增大,从而损害性能。
 
当然CLR不会坐视不管的,会提供一系列的优化措施,能够缓解代码爆炸
 
1.首先,假如为一个特定的类型实参调用了一个方法,以后再次使用相同类型实参来调用这个方法,CLR只会为这个方法/类型组合编译一次代码。所以,如果一个程序集使用List<DateTime>,一个完全不同的程序集(加载
 
到同一个AppDomain中)也使用List<DateTime>,CLR只会为List<DateTime>编译一次方法。
 
2.CLR认为所有引用类型实参都是完全相同的,所以代码能够共享。例如,CLR为List<String>的方法编译的代码可以直接用于List<Stream>的方法,因为String和Stream都是引用类型,CLR之所以能执行这个优化,是因为
 
所有引用类型的实参或变量实际只是指向堆上的对象的指针,而对象指针全部是以相同的方式来操纵。
 
但是某个类型的实参是值类型,CLR就必须专门为那个值类型生成本地代码。

转载于:https://www.cnblogs.com/liuhailiang/archive/2012/11/26/2788651.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值