博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 托管资源 与 非托管资源
阅读量:4287 次
发布时间:2019-05-27

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

 C# 托管资源 与 非托管资源

托管资源 

托管资源一般是指被CLR控制的内存资源,这些资源的管理可以由CLR来控制,.NET可以自动进行回收,主要是指托管堆上分配的内存资源。

例如程序中分配的对象,作用域内的变量等

GC静态类,提供了手动清理托管资源的接口。

namespace System{    //    // 摘要:    //     控制系统垃圾回收器(一种自动回收未使用内存的服务)。    public static class GC
1.GC.Collect(),强制回收

//        // 摘要:        //     强制对所有代进行即时垃圾回收。        [SecuritySafeCritical]        public static void Collect();
2.GC.ReRegisterForFinalize(object),
请求公共语言运行时不要调用指定对象的终结器。
//        // 摘要:        //     请求公共语言运行时不要调用指定对象的终结器。        //        // 参数:        //   obj:        //     不得执行其终结器的对象。        //        // 异常:        //   T:System.ArgumentNullException:        //     obj 为 null。        [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]        [SecuritySafeCritical]        [TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]        public static void SuppressFinalize(object obj);

非托管资源

非托管资源:不受CLR控制和管理的资源,比如文件流,的连接,网络连接,系统的窗口句柄,打印机资源等,可以认为资源的一组API。这类资源一般不存在于Heap(堆,内存中用于存储对象实例的地方)中。 

.Net平台中,CLR为程序员提供了一种很好的内存管理机制,使得程序员在编写代码时不需要显式的去释放自己使用的内存资源(这些在先前C和C++中是需要程序员自己去显式的释放的)。这种管理机制称为GC(garbage collection)。

GC的作用是很明显的,当系统内存资源匮乏时,它就会被激发,然后自动的去释放那些没有被使用的托管资源(也就是程序员没有显式释放的对象)。 

但是,CLR的GC功能也只能释放托管资源,对于非托管资源例如窗口,文件和网络连接等,它都只能跟踪非托管资源的生存期,而不知道如何去释放它。这样就会出现当资源用尽时就不能提供资源能够提供的服务,windows的运行速度就会变慢。这样的情况会出现在数据库的连接当中,当你没有显式的释放一个数据库资源时,如果还是不断的申请数据库资源,那么到一定时候程序就会抛出一个异常。 
在.NET的对象中实际上有两个用于释放资源的函数:Dispose和Finalize。

Finalize的目的是用于释放非托管的资源,而Dispose是用于释放所有资源,包括托管的和非托管的。 

更多:

转载地址:http://gjogi.baihongyu.com/

你可能感兴趣的文章
SPI总线之NSS
查看>>
【Java】Java自动类型转换
查看>>
【Java】Java强制类型转换
查看>>
【Java】:Java制作九九乘法表
查看>>
【JQuery】:JQuery加载模式
查看>>
【C语言】求一千以内的素数 第一种方法
查看>>
【C语言】求Fibonacci数列的前20项(数组)
查看>>
【C语言】求N的阶乘
查看>>
【HTML】解决DIV消除浮动问题(clear)
查看>>
【MySQL】使用cmd操作MySQL数据库
查看>>
【TP】ThinkPHP3.1用户登陆功能实现-基础环境搭建
查看>>
【TP】ThinkPHP3.1用户登陆功能实现-核心代码
查看>>
【易语言】易语言制作-bt天堂ok资源采集器(网络爬虫)
查看>>
【HTML】设置页面字体
查看>>
【HTML】一个简单的登陆页面
查看>>
【HTML】设置全屏图片
查看>>
【HTML】段落开始空两格
查看>>
【C语言】求Fibonacci数列前40项(循环)
查看>>
【C语言】制作九九乘法表
查看>>
【C语言】利用循环输出菱形
查看>>