精华内容
下载资源
问答
  •  如下图所示,当我们一个值类型移到引用类型时,数据也从堆栈移到堆中,当我们引用类型移到值类型时,数据就从堆移到堆栈中。数据从堆栈移到堆,或是从堆移到堆栈,都会产生较大的性能损失。数据从值类型移到...

      说了这么多,在实际编程时怎么使用它们呢?最大的问题是要弄清楚数据从堆栈移到堆的性能损失,反之亦然。

      如下图所示,当我们将一个值类型移到引用类型时,数据也从堆栈移到堆中,当我们将引用类型移到值类型时,数据就从堆移到堆栈中。数据从堆栈移到堆,或是从堆移到堆栈,都会产生较大的性能损失。数据从值类型移到引用类型的过程叫做装箱,从引用类型移到值类型叫做拆箱。


    图 8 装箱和拆箱过程示意

      如果你编译上面的代码,在相同的ILDASM中,你会看到在IL中的代码是如何装箱和拆箱的,如下图所示。


    图9 装箱和拆箱

      装箱和拆箱的性能影响

      为了查看性能的影响,我们将下面两个函数运行了1000次,如下图所示,左边的函数有装箱拆箱操作,右边的函数没有,我们使用了一个秒表对象监控所花的时间。


    图10  有装箱拆箱和无装箱拆箱执行时间对比

      从上图我们看到,有装修拆箱需要花3542毫秒,无装修拆箱只需2477毫秒,因此对性能的影响还是蛮大的。

      现在你对这两个重要的.Net概念是否都理解了呢?

    展开全文
  • .net必须知道的几个概念2

    千次阅读 2010-07-19 09:31:00
    本文解释.Net中的六个重要概念,它们分别是堆栈,堆,值类型,引用类型,装箱和拆箱。首先解释当你声明一个变量时在内存中... 如下图所示,当我们一个值类型移到引用类型时,数据也从堆栈移到堆中,当我们
    • 本文将解释.Net中的六个重要概念,它们分别是堆栈,堆,值类型,引用类型,装箱和拆箱。首先解释当你声明一个变量时在内存中会发生什么,接着介绍两个重要的概念堆栈和堆,然后介绍值类型和引用类型,文章最后用例子介绍了装箱和拆箱对性能的影响。

     

    装箱(boxing)和拆箱(unboxing)

    说了这么多,在实际编程时怎么使用它们呢?最大的问题是要弄清楚数据从堆栈移到堆的性能损失,反之亦然。

    如下图所示,当我们将一个值类型移到引用类型时,数据也从堆栈移到堆中,当我们将引用类型移到值类型时,数据就从堆移到堆栈中。数据从堆栈移到堆,或是从堆移到堆栈,都会产生较大的性能损失。数据从值类型移到引用类型的过程叫做装箱,从引用类型移到值类型叫做拆箱。

     

     

    装箱和拆箱过程示意

    图 8 装箱和拆箱过程示意

    如果你编译上面的代码,在相同的ILDASM中,你会看到在IL中的代码是如何装箱和拆箱的,如下图所示。

     

    装箱和拆箱

    图 9 装箱和拆箱

    装箱和拆箱的性能影响

    为了查看性能的影响,我们将下面两个函数运行了1000次,如下图所示,左边的函数有装箱拆箱操作,右边的函数没有,我们使用了一个秒表对象监控所花的时间。

     

    有装箱拆箱和无装箱拆箱执行时间对比

    图 10 有装箱拆箱和无装箱拆箱执行时间对比

    从上图我们看到,有装修拆箱需要花3542毫秒,无装修拆箱只需2477毫秒,因此对性能的影响还是蛮大的。

    现在你对这两个重要的.Net概念是否都理解了呢?

    展开全文
  • 请考虑某些数据移到堆中。这个应该怎么解决? 2.以下见代码:(报错信息在注释中) ``` #include int max(int a, int b) { if (a >= b)return a; else return b; } main() { int n, c; int w[100],...
  • C#微软培训教材(高清PDF)

    千次下载 热门讨论 2009-07-30 08:51:17
    C#--微软.NET的第一语言 ... 在本章中你了解 Microsoft.NET 的概念 .NET 框架 C#语言在.NET 框架的作用及其特性 1.1 Microsoft.NET 一场新的革命 1.1.1 什么是.NET 2000 年 6 月 ...
  • C#微软培训资料

    2014-01-22 14:10:17
    <<page 1>> page begin==================== 目 目目 目 录 录录 ... 2000 年 6 月 22 日 不论对 Microsoft 还是对整个 IT 业界都成为值得纪念的一天 这一天 微软公司正式推出了其下一代...
  • 2.3.9 当图像平后其离散傅里叶变换怎么样? 85 2.3.10 图像的平均值与其DFT 有什么联系? 88 2.3.11 一幅图像放缩后其DFT 会如何变化? 89 B2.8 什么是快速傅里叶变换? 92 2.3.12 DFT 有哪些优点和缺点...
  • swap,它还可以它们映射文件和文件位置,这样,读写内存对文件数据进行读写。不过,在这里,我们只关心 mmap 向进程添加被映射的内存的能力。munmap() 所做的事情与 mmap() 相反。 如您所见,brk() ...
  • 操作系统(内存管理)

    热门讨论 2009-09-20 12:55:25
    其次,它不仅可以虚拟地址映射物理的 RAM 或者 swap,它还可以它们映射文件和文件位置,这样,读写内存对文件数据进行读写。不过,在这里,我们只关心 mmap 向进程添加被映射的内存的能力。 munmap() ...
  • -ExtAspNet支持原生的AJAX,也就是说控件的属性改变在AJAX过程会反映页面,但并不是所有的控件属性都支持AJAX改变。 -加载s.gif图片在本机进行,不会请求extjs.com远程资源(feedback:efrigate43,abaocoole)...
  • 1.24 我在一个文件定义了一个extern数组,然后在另一个文件使用,为什么sizeof取不数组的大小? 声明问题 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 *1.26 main的正确定义是什么?...
  • C语言编程要点

    2017-09-18 00:10:37
    3.3. 对外存(磁盘或磁带)而不是内存数据进行排序称为外部排序。 39 3.4. 1哪一种查找方法最方便? 44 3.5. 1哪一种查找方法最快? 46 3.6. 1什么是哈希查找? 51 3.7. 1怎样对链表进行排序? 53 3.8. 1怎样查找...
  • 1.24 我在一个文件定义了一个extern数组,然后在另一个文件使用,为什么sizeof取不数组的大小? 13 声明问题 14 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 14 *1.26 main的正确...
  • ExtAspNet_v2.3.2_dll

    2010-09-29 14:37:08
    -ExtAspNet支持原生的AJAX,也就是说控件的属性改变在AJAX过程会反映页面,但并不是所有的控件属性都支持AJAX改变。 -加载s.gif图片在本机进行,不会请求extjs.com远程资源(feedback:efrigate43,abaocoole)...
  • 新版Android开发教程.rar

    千次下载 热门讨论 2010-12-14 15:49:11
    � 丰富的数据业务,导致数据流量的显著增加 。 � 手机来源增加,价格更为低廉。 对软件开发者的影响 � 因为 Android 移动软件平台抱持开放互通的观念,势必吸引不少自由软件的拥护者。 � 开发方向有三个重点 :...
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    1.24 我在一个文件定义了一个extern数组,然后在另一个文件使用,为什么sizeof取不数组的大小? 13 声明问题 14 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 14 *1.26 main的正确...
  • 习惯弹出的页面放大然后拖另一个分屏上来编辑任务),这样就不要纠结shell长度的问题。 <img alt="image" src="https://img-blog.csdnimg.cn/img_convert/5898e14b454cfa10583e5b4bda947b19.png" />...
  • 第三个第N个表示要插入或则替换的数据 <p><strong>Date</strong></p> 时间对象也是使用非常多的玩意,它是使用GMT时间来描述,而且时间对象是可以直接比对大小的。 <pre><code> JavaScript var date1 ...
  • 世界500强面试题.pdf

    2019-11-01 14:33:26
    1.4.8. 计算 1 N 的十进制数 1 的出现次数 ............................................. 97 1.4.9. 栈的 push、pop 序列[数据结构] .......................................................... 99 1.4.10....
  • ........................................18 B1.2 因为矩阵运算次序是不能互换的,如果改变使用不变线性操作符的次序会发生什么情况?...................................................................18 B...

空空如也

空空如也

1
收藏数 20
精华内容 8
关键字:

怎么将数据移到堆中