zoukankan      html  css  js  c++  java
  • 非托管资源的释放

    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 接口,拿

  • 相关阅读:
    Mysql 关于 FOUND_ROWS() 和 ROW_COUNT() 函数
    MySQL数据库远程连接
    MySQL数据库远程连接
    Linux 下不得不说的那些快捷键
    Linux 下不得不说的那些快捷键
    linux实时查看更新日志命令
    linux实时查看更新日志命令
    the current differences between MyISAM and InnoDB storage engines
    Difference Between InnoDb and MyISAM(个人觉着是好文章,简单易懂,推荐看)
    MyISAM to InnoDB: Why and How(MYSQL官方译文)
  • 原文地址:https://www.cnblogs.com/syf/p/2998051.html
Copyright © 2011-2022 走看看