当前位置: 首页 > news >正文

非托管资源的释放

1、基础知识准备:
 
C#中的数据类型分为两种:值类型(int,char,double等)和引用类型(数组,用户自定义类型(包括类,接口,委托),object,字符串),对应也就有值类型的变量和引用类型的变量;面向对象编程中,简单数据类型是存放值的变量,这种变量关心的是值,因而称为值类型,另外,C#在堆(Heap)中创建和维护对象(一般是类),程序使用对象的存储地址来引用这个对象,这类用来保存地址的变量被称为引用类型变量;一个程序运行时,变量主要存放在“堆”和“栈”中,“栈”中主要用于存放“子函数的临时变量,局部变量”,“堆”中主要用于存放“全局变量,静态变量,new产生的变量”,托管资源主要研究的是“堆中的变量”吧
 
2、对“托管资源”的理解?
 
托管即托付管理,.Net中时托付给CLR(Common Language Runtime—公共语言运行时)管理(注:CLR提供内存管理机制GC-garbage collection);
 
资源指的是系统内存空间,可以是程序中建立的对象,作用域内的变量等;
 
托管资源合起来就是指被CLR控制的内存空间(资源),这些资源的分配与释放可由CLR完成,因而减轻程序员的负担;
 
3、“非托管资源”:不属于CLR管理(分配和释放内存),主要包括文件流、数据库的连接,COM对象,打印机资源等等;
 
4、“托管资源”与“非托管资源”的释放?
 
托管资源的释放由GC完成,非托管资源的释放有两种方法:
 
(1)实现protected void Finalize()来释放,因为GC在释放对象时会检查该对象是否实现了Finalize()方法,如果是则调用它,但这样会降低效率;
 
(2)通过实现一个接口显式地提供给客户端手工释放对象的方法,而不是等着GC来释放:System 命名空间内有一个 IDisposable 接口,拿

转载于:https://www.cnblogs.com/syf/archive/2013/04/03/2998051.html

相关文章:

  • 数三角形
  • 尝试写第一个js插件 图片轮播
  • 确定字符串互异
  • errno含义
  • 将满二叉树转换为求和树
  • JavaBean的学习
  • 排版页数
  • 最长回文串
  • 分享:Sersync试用
  • pstreegdb
  • 一点正则表达式的学习碎片
  • 链表分割
  • void*
  • python requests.session 与 requests
  • 爬虫_urlencode问题
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • centos安装java运行环境jdk+tomcat
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • iOS | NSProxy
  • Iterator 和 for...of 循环
  • JavaScript类型识别
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • Redis字符串类型内部编码剖析
  • Terraform入门 - 1. 安装Terraform
  • v-if和v-for连用出现的问题
  • 电商搜索引擎的架构设计和性能优化
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 数据科学 第 3 章 11 字符串处理
  • 无服务器化是企业 IT 架构的未来吗?
  • 小程序button引导用户授权
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • # 安徽锐锋科技IDMS系统简介
  • #include到底该写在哪
  • #宝哥教你#查看jquery绑定的事件函数
  • (Java数据结构)ArrayList
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (转)IOS中获取各种文件的目录路径的方法
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .describe() python_Python-Win32com-Excel
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .net流程开发平台的一些难点(1)
  • /dev下添加设备节点的方法步骤(通过device_create)
  • @Autowired标签与 @Resource标签 的区别
  • @SuppressLint(NewApi)和@TargetApi()的区别
  • @拔赤:Web前端开发十日谈
  • [20150707]外部表与rowid.txt
  • [ai笔记9] openAI Sora技术文档引用文献汇总
  • [BZOJ 2142]礼物(扩展Lucas定理)
  • [C#]使用DlibDotNet人脸检测人脸68特征点识别人脸5特征点识别人脸对齐人脸比对FaceMesh
  • [C++] cout、wcout无法正常输出中文字符问题的深入调查(1):各种编译器测试