如果有的话,CLR中的装箱和拆箱操作有哪些性能改进?

Ste*_*idi 4 .net c# clr boxing unboxing

几个月前我参加了一个研讨会,发言人声明自从.NET 1.1以来,装箱或拆箱操作的总成本已经降低.我查看了我的(差)注释,无法确定此语句是否引用了box和unbox指令,或者引用了类(即泛型类型),使得装箱/拆箱不太可能发生.

.NET 1.1和.NET 4.0之间的CLR拳击相关指令是否有性能改进,如果是这样,我在哪里可以找到有关显示收益的测量信息?

Mar*_*ell 6

我无法对性能发表评论(因为你需要进行性能分析等) - 但这里有一个有趣的变化是受限制的操作码,特别是泛型.这里的优点是对于以下方法:

static void DoSomething<T>(T x, T y) where T : IComparable<T>
{
    if(x.CompareTo(y) < 0) { /* whatever */ }
}
Run Code Online (Sandbox Code Playgroud)

它将使用一个受约束的呼吁CompareTo,这使得它能够或者使用静态呼叫到一个数值类型的方法的实现(没有拆箱),或使用一个虚拟呼叫,如果它是一个引用类型.通常,在值类型上调用基于接口的方法需要一个框,因此这非常有用.