《C#高级编程》第五章学习笔记

托管和非托管的资源

名词解释

后台内存管理

32位处理器,会分配给应用程序4G内存空间,一般从0开始向上排列,存放程序,dll和变量,称为虚拟内存。

  • 值类型,一般存在栈中,从高地址向下填充,栈指针总是指向下一个空闲存储单元。由于栈的特性是先进后出,所以变量的生存期是嵌套的,当变量超过作用域后,生存期结束,从栈中删除。
  • 引用类型,使用new来分配托管堆上的内存空间,存储实例化的对象内容,同时还需要栈来存储托管堆地址。堆是从低地址向上填充,不存在互相影响关系,能够在方法结束后一段时间内存储的数据仍是可用的。

处理非托管的资源

  1. 析构函数和终结器
class MyClass
{
	~MyClass()
	{
	// finalizer implementation 相当于重写Finalize()方法
	// 第一次删内存,第二次才删对象,所以有性能损失
	}
}
  1. IDisposeable接口
    声明了Dispose()方法,能够显示的精确释放资源,但是有可能会出现异常,最好使用try代码块实现。
  2. using语句
    using语句之前一直作为引用命名空间,在此处的作用是限定作用域,在作用域的末尾调用Dispose()方法。
using (var Mycalss=new Mycalss())
{
// do
}

应用

刚好遇到了个实际问题,在项目中需要插入并预览图片,支持更新和删除,然而发现会报错,提示线程正在使用此文件,用了dispose方法也不行。最终的解决办法是将图片用文件流的方式使用,然后dispose才可以。
加载图片后无法删除的解决方法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值