zoukankan      html  css  js  c++  java
  • 装箱与拆箱以及性能损失

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

    值类型:      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); 将值类型加入集合中,但是这一个过程会发生装箱。
    
  • 相关阅读:
    网络流初步——增广路算法(EK)模板
    求大组合数
    RMQ问题
    欧拉函数
    [LintCode] Minimum Path Sum
    [LintCode] Unique Paths II
    [LintCode] Unique Paths
    [LintCode] Flip Bits
    [LintCode] O(1) Check Power of 2
    [LintCode] Count 1 in Binary
  • 原文地址:https://www.cnblogs.com/baobao2010/p/1784309.html
Copyright © 2011-2022 走看看