深圳.net培训
达内深圳罗湖中心

138-2888-3675

热门课程

【深圳.net培训】浅谈资源管理

  • 时间:2017-11-07
  • 发布:深圳.net培训
  • 来源:达内新闻

深圳.net培训携手深圳.net培训(http://sz.net.tedu.cn/)专家对linux的资源管理做了一些简单的解析,希望对大家有帮助。

.NET 提供两种管理非托管资源生命周期的机制:终结器和IDisposable接口。

(1)GC

GC能够判断某个实体目前是否依旧被应用程序的活动对象所引用,对于那些没有被活动对象直接或间接引用的实体,GC会将其判断为垃圾。

GC会在每次运行时压缩托管堆,压缩托管堆能够将当前仍旧使用的对象放在连续的内存中,因此空余空间也是一块连续的内存。

(2)终结器


终结器只是一种防御手段,仅仅能够保证给定类型的对象所分配的非托管资源最终被释放。GC会把需要执行终结的对象放在专门的队列中,然后让另一个线程来执行这些对象的终结器。这样,GC可以继续执行其当前的工作,在内存中移除垃圾对象,而在下一次的GC调用中才会从内存中移除这些已被终结的对象。

(3)Dispose()和Close()

使用了非系统资源的类型会自动在终结器中调用Dispose(),以便在使用者忘记的时候仍保证能正常释放资源,但这些资源会在内存中停留更长时间,所以最好的方案还是由使用者自己显示地使用IDisposable接口的Dispose()来释放。Dispose()并不是将对象从内存中移除,而只是让对象释放掉其中的非托管资源。

Close:清理资源,对象已经不需要被终结,但一般没有调用GC.SuppressFinalize(),所以对象仍旧在终结队列中。

Dispose:清理资源,调用GC.SuppressFinalize()告知GC该对象不再需要被终结

(4)using

using语句能以最简单的方式保证用户的对象可以正常销毁,即使对象在调用操作时出现异常。当有多个对象需要销毁时,可以使用多个using块或一个try/finally块

想更深入了解.net专业吗?欢迎来到我们达内,跟着达内的脚步,一起跟上的互联网信息时代的节奏,给你一个丰富多彩的人生——【深圳.net培训】

上一篇:【深圳.net培训】GetHashCode()陷阱
下一篇:【深圳.net培训】跨域问题的由来及解决方案

【深圳.net培训】 basic基础认证原理

深圳.net培训让你玩转MVC的扩展点

深圳.net培训:为何避免Finalize方法的重写?

深圳.net培训:如何提升IIS处理能力?

选择城市和中心
贵州省

广西省

海南省