博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
托管和非托管
阅读量:5300 次
发布时间:2019-06-14

本文共 604 字,大约阅读时间需要 2 分钟。

  .NET绝大内存垃圾会有  公共语言运行时自动回收,但是有一部分需要我们来手动回收。

 

托管资源:一般指CLR控制的内存资源, 资源由CLR来管理。GC负责垃圾回收

非托管资源:不受CLR控制和管理的资源。GC不知道如何释放,需要人工进行释放。

 

 

非托管包括:

文件流,图像类型类,数据库连接,网络连接等等。

 

如何释放非托管资源:

简单来说可以使用using 来释放资源

当使用using,编译器自动翻译成 try... finally.  在finally 里面实现  xxx.Dispose();

 

注意方向:

在.NET中应该尽可能的少用析构函数释放资源。在没有析构函数的对象在垃圾处理器一次处理中从内存删除,但有析构函数的对象,需要两次,第一次调用析构函数,第二次删除对象。而且在析构函数中包含大量的释放资源代码,会降低垃圾回收器的工作效率,影响性能。

对于包含非托管资源的对象,最好及时的调用Dispose()方法来回收资源,而不是依赖垃圾回收器

在.NET中,凡是继承了IDisposable接口的类,都可以使用using语句,从而在超出作用域后,让系统自动调用Dispose()方法。

 

更多内容可以查看

https://www.cnblogs.com/yubinfeng/p/4625833.html

转载于:https://www.cnblogs.com/TheMiao/p/9218901.html

你可能感兴趣的文章
(springboot)freemarker(二)
查看>>
linux下golang gRPC配置详解
查看>>
mongodb 简单使用说明
查看>>
eclipse的调试方法的简单介绍
查看>>
OneAPM 云监控部署与试用体验
查看>>
加固linux
查看>>
wget 升级
查看>>
为什么需要大数据安全分析?
查看>>
day13.字典复习
查看>>
IPSP问题
查看>>
(转)Java中的String为什么是不可变的? -- String源码分析
查看>>
HNU 10362 A+B for Input-Output Practice (II)
查看>>
iOS——UIButton响应传参数
查看>>
【转帖】关于'eh vector constructor/destructor iterator'的讨论及类的内存分布模型
查看>>
十. 图形界面(GUI)设计9.列表和组合框
查看>>
10.17动手动脑
查看>>
操作系统实验一:并发程序设计
查看>>
互联网协议入门(一)
查看>>
16_Python变量作用域_Python编程之路
查看>>
js index of()用法
查看>>