1、引用类型

FCL(Framework)中的大多数类型都是引用类型,引用类型总是在托管堆中分配的,C#的new操作符会返回对象的内存地址,也就是指对象数据的内存地址。在使用引用类型时,存在以下性能问题,这是我们在开发中必须要注意的:

a、内存必须从托管堆上分配(也就是说每new一个对象,会占用内存,对象过多就会导致内存占用)

b、 堆上分配的每个对象都有一些额外的成员,这些成员必须初始化

c、对象中的其他字节(为字段而设),总是设为0

d、从托管堆中每分配一个对象,可能强制执行一次垃圾回收操作

所以当我们的应用程序中都是引用类型时,应用程序的性能会显著下降。

2、值类型

上面介绍了引用类型,知道了当从托管堆中每分配一个对象时,都会造成应用程序性能的下降。设想当使用Int32类型初始化一个数字6或者使用float初始化一个浮点数6.6的时候,都进行一次内存的分配,那么应用程序的性能会受到严重的影响.为了提供应用程序的性能,CLR提供了名为"值类型"的轻量级类型.

转载于:https://www.cnblogs.com/GreenLeaves/p/7506941.html

C# 引用类型和值类型相关推荐

  1. 跟小静读CLR via C#(02)-基元类型、引用类型、值类型

    跟小静读CLR via C#(02)-基元类型.引用类型.值类型 一. 基元类型 编译器能够直接支持的数据类型叫做基元类型.例如int, string等.基元类型和.NET框架类库FCL存在着直接的映 ...

  2. .NET引用类型与值类型

    值类型和引用类型的基类 引用类型和值类型都继承自System.Object类.不同的是,几乎所有的引用类型都直接从System.Object继承,而值类型则继承其子类,即直接继承System.Valu ...

  3. [转载]实际举例C#引用类型和值类型的区别

    http://www.cnblogs.com/coolbeibei/archive/2009/03/23/1419706.html 实际举例C#引用类型和值类型的区别 我们都知道,c#的两大数据类型分 ...

  4. .net 基元类型,引用类型和值类型

    基元类型(primitive type): 编译器直接支持的数据类型称为基元类型(primitive type). string 与 String: 由于C#中的string (一个关键字)直接映射到 ...

  5. 读书笔记_CLR.via.c#第五章_基元类型_引用类型_值类型

    基元类型 1.不管在什么操作系统上c#的int始终代表32位整数. 2.c#中long代表64位. 类型转换 安全转换时,才允许隐式转型. 不安全转换时,为显式转型. 溢出检测方法 控制溢出的一个办法 ...

  6. 第五章 基元类型、引用类型、值类型 CLR学习第五课

    一.基元类型:编译器直接支持的数据类型称为基元类型(如int类型其对于的是system.int32). 二.类型溢出,可以用checked 和unchecked进行类型溢出检查和不进行类型溢出检查.一 ...

  7. 第五章 基元类型,引用类型和值类型

    目录 5.1 编程语言的基元类型 5.2 引用类型和值类型 5.3 值类型的装箱和拆箱 5.4 对象哈希码 5.5 dynamic基元类型 5.1 编程语言的基元类型 编译器直接支持的数据类型称为基元 ...

  8. 《CLR via C#》读书笔记 之 基元类型、引用类型和值类型

    第五章 基元类型.引用类型和值类型 2013-02-27 5.3 值类型的装箱和拆箱     5.3.2 对象的相等性和同一性 参考 ToDo: 什么时候使用值类型,什么时候使用引用类型 5.3 值类 ...

  9. 浅析.NET中的引用类型和值类型(上)

    .NET中的类型分为值类型和引用类型,他们在内存布局,分配,相等性,赋值,存储以及一些其他的特性上有很多不同,这些不同将会直接影响到我们应用程序的效率.本文视图对.NET 基础类型中的值类型和引用类型 ...

  10. 《.NET框架程序设计》第5章 基元类型、引用类型与值类型

    5.1 基元类型 基元类型可以用快捷语法.比如int a=0;等同于System.Int32 a=new System.Int32(); 建议,使用全名,为了代码含义看起来更清晰. 5.1.1 Che ...

最新文章

  1. Messages 贪心,期望,概率,模拟(2000)
  2. python 表单中值为空的还需要传入么_牛掰!100行Python,自动动手打造一款多国语言翻译软件...
  3. mp4视频转gif图片
  4. struts2 国际化资源文件自定义的路径解决方法
  5. log4j mysql 单引号_log4j写数据库存在单引号问题
  6. bash shell简介及变量
  7. 用Java打开一个网页
  8. docker部署服务实现文件上传到本地问题解决
  9. Stoer-Wagner无向图全局最小割(hduoj 3691 Nubulsa Expo)
  10. 【Django 2021年最新版教程32】Django 事务 悲观锁 乐观锁
  11. X明X源面试题《三》
  12. 机器人SCI期刊及其特点、评价、投稿之我见
  13. 联想win7无法连接无线网络连接服务器,联想笔记本连不上wifi该怎么处理
  14. 正则匹配中文英文字符及标点
  15. Android开发初体验
  16. 直接排序三种方法参考——监视哨
  17. JAVA多线程终止线程、退出线程、Interrupt()方法、苦逼的搬砖工
  18. 《黑客帝国》中的代码雨让人身临其境 利用Python轻松实现
  19. 多重比较偏误及三种调整方式:Benferroni/Holm/BHY Adjustment
  20. faster rcnn源码解析

热门文章

  1. 2017.1.9版给信息源新增:max_len、max_db字段
  2. Android中对Log日志文件的分析[转]
  3. 【LeetCode】142 - Linked List Cycle II
  4. centos安装easy_instal
  5. HTML中的form表单有一个关键属性 enctype
  6. eclipse 默认jdk 的设置 eclipse.ini -vm 参数
  7. 【mysql错误】用as别名 做where条件,报未知的列 1054 - Unknown column 'name111' in 'field list'...
  8. PDF文字怎么编辑,PDF文档编辑方法
  9. Android 取得 ListView中每个Item项目的值
  10. c++中的对象引用(object reference)与对象指针的区别