试着通过阅读 this enlightening article by Juval Lowy来了解Generics 释义..当您定义Generic类定义时,它将被编译为IL. 对于值类型,只要您请求特定的值类型,它就会用您的特定值类型替换T以获取该特
释义..当您定义Generic类定义时,它将被编译为IL.
>对于值类型,只要您请求特定的值类型,它就会用您的特定值类型替换T以获取该特定配置的IL,例如MYLIST< INT>特性效果:没有拳击和拆箱惩罚.
>所有好…对于引用类型,编译器用Object替换定义中的所有T实例,并创建用于所有ref类型的IL.然而,实例是根据实际请求的ref类型分配的,例如MYLIST<字符串>
现在预先泛型我们可以编写采用Object参数的方法.泛型声称100%的性能提升是因为它“避免了当您想要使用它时将对象类型向下转换为特定类型时所产生的性能损失”
// assume GetItem returns an Object string sMyPreciousString = (string) obList.GetItem();
当您从Object转发到特定引用类型时,这个性能会受到什么影响?此外,它似乎向对象(甚至泛型会做到这一点)的上传不是性能打击..为什么?
向上转换到对象不需要执行时间检查 – 它将始终有效,并且基本上只是一个无操作.向下转换需要执行时间检查,以确保您没有将Stream转换为String.这是一个非常小的惩罚,并且不太可能成为瓶颈 – 但避免它只是泛型的一个额外好处.