• 装箱与拆箱以及性能损失


    先分析一下值类型与引用类型

    值类型:      Int32 i =4; 【变量i是值类型,被分配在栈上,变量包含变量实例,使用效率高】

    引用类型:   object o = i; 【变量o是引用类型,被分配在托管堆,变量包含实例的指针,通过此指针引用其实例】

    引用类型性能要比值类型差很多,因此尽量使用值类型,而少使用引用类型。

    装箱

    Int32 i =4;  定义一个值类型
    
    objct o = i; [装箱]这个值类型被复制并分配到托管堆,并把它转成引用类型O,这一个过程将会造成性能损失。
    

    拆箱

    Int32 i =4;  定义一个值类型
    
    objct o = i; 转成引用类型O
    
    Int32 n = (Int32)O;[拆箱]将托管堆中的引用类型实例复制到栈中,转为值类型n
    

    由此可见,装箱和拆箱是要尽量避免的操作。

    同时,尽可能少用Array,它的ADD操作会将值类型变量转为引用类型,而泛型List则不会,它是一个增强版的Array,它可以直接添加值类型到List中。

    Int32 i = 4;  定义值类型
     
    Array a = new Array(); 定义一个集合
    
    a.Add(i); 将值类型加入集合中,但是这一个过程会发生装箱。
    
  • 相关阅读:
    自动生成 Makefile 的全过程详解
    cpio实例讲解
    RPM命令手册
    SSHFS
    shell脚本命令行参数传递问题
    批量改名总结
    例解 autoconf 和 automake 生成 Makefile 文件
    Shell中的shift命令
    cpio命令详解
    Git笔记基础
  • 原文地址:https://www.cnblogs.com/baobao2010/p/1784309.html
Copyright © 2020-2023  润新知