C# GC机制 装箱和拆箱 数组 栈 队列 哈希表 字典

 * GC机制
 * GC是一种自动化内存管理机制,负责在程序运行时跟踪并管理对象的内存使用情况,当对象不再被引用时,自动从内存中删除这些对象,并释放内存
 * 特点:
 * 1.自动管理
 * 2.分代回收 代龄  高效,大部分朝生夕灭,只有少部分的对象会长时间存在
 * 3.不确定性 GC.Collect()
 * 4.gc会影响程序的性能
 * 5.gc只回收堆区内存,栈区内存是使用后自动释放
 *
 *
 *
 * 数组:存储相同类型元素的固定大小的顺序集合
 * 数据类型[] 数组名
 *
 * Array类
 *
 * ArrayList:动态数组,自动调整数组大小

 * 装箱与拆箱
 * 将所有的数据的都作为了object去处理
 * 装箱:从值类型转换到引用类型
 * 拆箱:从引用类型转换到值类型
 * 一定只有经过装箱的对象才会有拆箱
 * 装箱的原理:
 * 1.分配堆区内存(值类型数据大小+指针大小)
 * 2.将值类型数据拷贝到分配的堆区内存中
 * 3.将堆区的内存地址返回
 * 拆箱的原理:
 * 1.获取堆区中的属于值类型的地址
 * 2.将堆区中的值类型数据拷贝到栈区中的值类型实例中
 *
 * 性能损耗
 * 1.装箱时,需要分配内存,创建新的对象
 * 2.拆箱时,需要释放内存
 *
 * List:动态数组,泛型的
 *
 * LinkedList:双向链表
 *
 * 数组:
 * 1.声明数组时,必须指定数组的大小 2.数组的插入和删除数据比较麻烦,但是查询比较快
 * ArrayList:
 * 可以存储任意类型数据,但是会带来装箱与拆箱的操作
 * List:
 * 声明时指定了数据类型,避免了装箱与拆箱,能够自动扩容
 * LinkedList:
 * 双向链表,插入和删除数据比较快,但是查询比较慢
 *
 * 栈 Stack:先进后出
 * 队列 Queue:先进先出
 * 哈希表 Hashtable:键值对形式存储
 * 哈希冲突:不同的键值对在哈希表计算中得到的相同的哈希值

   解决办法
 * 1.链地址法
 * 2.开放寻址法
 * 字典 Dictionary:键值对形式存储
 *
 * 字典与哈希表区别:
 * 相同点:
 * 1.都是键值对形式存在,且键是唯一的,值是不唯一的,都是无序的键值对
 * 2.存储的数据个数不受限制
 * 3.方法高度相似
 * 不同点:
 * 1.键值对的类型不一样,哈希表是任意类型,字典是指定类型
 * 2.命名空间不一样 哈希表System.Collections,字典System.Collections.Generic
 * 3.限制类型不同,字典存储数据时限制类型,哈希表是存储任意类型
 * 4.性能不同,哈希表存在装箱与拆箱,字典不存在装箱与拆箱

测试GC在性能中的占用

数组创建与使用

ArrayList动态数组的创建与使用

object效率低下的原因:装箱和拆箱

所以在正常使用中一般不使用ArrayList,虽然可以装下任意类型,但是因为是object涉及装箱和拆箱的时间,会导致效率低下,而下述List采用泛型效率更高。

List动态数组的创建与使用

LinkedList双向链表的创建与使用

Stack栈的创建与使用

Queue队列的创建和使用

Hashtable哈希表的创建和使用

Ps:解决哈希冲突

Dictionary字典的创建和使用

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值