- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
在.net编程环境中,系统的资源分为托管资源和非托管资源。
对于托管的资源的回收工作,是不需要人工〒预回收的,而1L你也无法干预他们的回收,所能够做的只是丫解.net
CLR如何做这些操作。也就是说对于您的应用程序创迚的大多数对象,讨以依靠.NET Framework的垃圾回收器隐式 地执行所冇必要的内存筲理任务。
资源分力两种,托管?的内存资源,这是不需要我们操心的,系统已经为我们进行管理丫:那么对于非托宵的资源, 这甩再芾申一下,就是Stream,数据库的连接,GDI+的相关对象,还有Com对象等等这些资源,需耍我们乎动去释放。
对于非托管资源,您在应用程序屮使用完这些非托管资源之后,必须显示的释放他们,例如 System.lO.StreamReader的一个文件对象,必须显示的调川对象的Closefl方法关闭它,否则会占川系统的内存和资源, 而且可能会出现总想不到的错误。
我想说到这里,一定要消楚什么是托管资源,什么是非托锌资源Y?释放。
煅常见的-类非托管资源就是包装操作系统资源的对象,例如义件,窗口或网络连接,对于这类资源M然垃圾回收 器讨以跟踪封装非托管资源的对象的屯存期,但它不了解具体如何淸理这咚资源。还好.net Framework提供了 Finalize() 方注,它允许在垃圾冋收器R收该类资源时,适当的淸理非托铃资源。如粜在MSDN Library屮搜索Finalize将会发现 很多类似的主题,这甩列举几种常见的非托管资源:
ApplicationContext.Brush,Component,ComponentDesigner,Container,
Context,Cursor,FileStream,Font,Icon,Image,Matrix,Object,OdbcDataReader,OleDBDataReader,Pen,Regex,Socket,St reamWriter,Timer,Tooltip等等资源。可能在使用的吋候很多都没存注意到!
关子托钤资源,就不用说了撒,像简巾的int,string,float,DateTime等等,.net屮超过80°/。的资源都是托钤资源。 非托宵资源如何释放,.NET Framework提供Object.nnalize方法,它允许对象在垃圾冋收器冋收该对象使用的内存 时适当消理其非托管资源。默认情况下,Finalize方法不执行任何操作。默认情况下,Finalize方法不执行任何操作。 如果您要让垃圾回收器在回收对象的内存之前对对象执行消理操作,您必须在类中芾写Finalize力*法。然而人家都可 以发现在次际的编程十根本无法override方法FinalizeG,在C#屮,可以通过析构函数自动生成Rnaiize方法和对基类 的Finalize方法的调用。
例如:
-MyClass()
{
// Perform some cleanup operations here.
}
该代码隐式翻译为下而的代码。
protected override void Finalize()
{
try
{
// Perform some cleanup operations here.
}
finally
{
base.FinalizeO;
}
}
但是,在编程十,并不建议进行override方法Finalized,因力,实现Finalize方法或析构蚋数对性能可能会舟负而影 响。一个简维的理由如下:用Finalize方法回收对象使用的内存需要至少两次垃圾回收,当垃圾回收器回收时,它只 冋收没冇终结器(Finalize方法)的不可访问的lAl存,这时他不能冋收具有终结器(Finalize方法)的不可以访问的内存 。它改为将这些对象的项从终止队列中移除并将他们放肾在标记力“准备终止”的对象列表屮,该列表中的项指向托貧?堆 屮准备被调用其终止代码的对象,下次垃圾回收器进行回收时,就回收并释放丫这些内存。
C#托管及未托管对象管理
C#屮的对象分为值类型和引用类型,二者鉍大的区别在r数裾的存储方式和存储位罝.WINDOWS操作系统使用虚拟 寻址系统來宵理程序运行吋产生的数据存放.简单的说,该系统管理犄一个内存区域,在该IX域中划拨出--部分出來专门存 放值类型变尕,称为堆栈,堆栈采川先进后出的原则,将值类型变杂从区域的最商地址位开始向低位地址存储,先进后出,后 进先出的管理//式保证了仉类型变萤在山了作用域后能即使的消除占川的闪存区域,由于堆栈速度快,所保存的数据-般 不太大,这部分一般不需要用户专门操作.伉类型保存在堆栈汇总,堆栈有非常高的性能,但对于所有的变杂来说还足 不太灵活。通常我们希望使川一个方法分配内存,來枰储一些数据,并在方法返出后的很长一段时间内数据仍趦可以使 用的
您可能关注的文档
最近下载
- 基于springboot的校园二手交易小程序.docx VIP
- 小升初英语一般将来时专项训练.pdf VIP
- 17J008 挡土墙(重力式、衡重式、悬臂式)(最新).pdf VIP
- 《非麻醉医师实施口腔诊疗适度镇静镇痛专家共识》解读.pdf VIP
- 2023水电工程建设征地移民安置技术通则.docx VIP
- YY 0017-2016骨接合植入物 金属接骨板.pdf
- 银行业金融机构高级管理人员任职资格考试题库及答案——2024年整理.pdf
- 12第二编 第三章 司马迁与史记.pptx VIP
- 标准图集-23S519-小型排水构筑物.pdf VIP
- 16第二编 第七章 汉代文人诗.pptx VIP
文档评论(0)