C#内存管理
C#两种内存:栈内存和堆内存
1、值类型:是栈内存管理,对象使用结束自动回收
2、引用类型:是堆内存管理,托管内存GC会自动回收不需要管,非托管内存(汇集成IDisposabla接口的,比如FIleStream类操作文件,或者SqlConnection数据库操作,或者句柄,或者Socket通讯都是非托管内存),非托管内存需要手动Dispose()掉,否则容易造成内存泄漏。
2.1句柄:
房卡没还,房间就一直被占着!别人进不去!
房间 =资源(文件、图片、数据库连接)
酒店前台 =操作系统
房卡 = 句柄
你没有房间钥匙,也进不去房间内部,你只有一张房卡。
你要:
开门 → 刷卡
开灯 → 刷卡
退房 → 还卡
3、如何释放非托管资源
方式一:使用DisPose()函数
方式二:using(){},()内包含你执行的操作,using帮你释放
额外:析构函数 ~类名 :使用析构函数是兜底的作用,不能代替using和dispose()
