zoukankan      html  css  js  c++  java
  • C# 装箱原型

    同是两段代码:

          string str="str"+9;

          string str1="str"+9.ToString();

    前者在IL中查看是,会发生一次Box装箱操作,后者没有发生装箱,原因是调用了整型的ToString方法.ToString方法的原型为:

            Public override String ToString()

            {

                return Number.FormatInt32(m_value,null,NumberFormatInfo.CurrentInfo);

            }

    ToString是直接通过操作内存来完成从Int和String类型转换的,所以后者并没有发生装箱.

    另外通过跟踪可知:装箱操作之所以会带来性能上的损失,因为它需要完成以下几个步骤:

            首先:它会给值类型在托管堆中分配内存.除了值类型本身所分配的内存外,内存总量还要加上类型对象指针和同步块索引所占用的内存.

            然后:将值类型的值复制到新分配的堆内存中

            最后:返回已经成为引用类型的对象的地址

    另外string类型本身就是一个比较特殊的类型,它一旦赋值之后,在内存堆中的值就不会改变,从而对于要使用大量的字符时,使用stringbuilder效率会高出很多.

  • 相关阅读:
    select top 变量问题
    distinct top執行順序
    Subquery typo with using in(转)
    sql:查询课程号'0312091006'成绩排名第5到第10之间的学生学号
    case when then
    触发器
    索引
    管理事物处理
    053345
    053344
  • 原文地址:https://www.cnblogs.com/MR-LIUB/p/3448407.html
Copyright © 2011-2022 走看看