C#编程中的内存管理过程中的问题分析.docVIP

C#编程中的内存管理过程中的问题分析.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PAGE PAGE 1 C#编程中的内存管理过程中的问题分析   摘要:采用C#语言进行编程的时候,程序员不用对内存管理过多的关心,对内存产生的垃圾文件垃圾收集器会自动进行清理。当然,对于一些高质量的代码编写,还是要对后台处理有所了解,清楚C#编程内存管理的一些原理及问题。本文主要是根据内存管理的一些内容进行分析,并对其管理过程中的一些问题进行处理。   关键词:C#编程;内存管理;堆栈;托管堆   中图分类号:TP312.1文献标识码:A文章编号:1007-9599(2012)20-0000-02   对于C#编程而言,其主要是把数据分为两个类型,引用数据类型和值数据类型,在内存管理中,这两类数据存储的位置是不同的,引用数据类型主要存储于内存的托管堆中,而值数据类型主要存储于堆栈中。   1C#编程中内存管理的主要内容   一般而言,采用虚拟寻址系统将程序中可用地址通过映射存储于内存中的实际地址上。对于硬件内存而言,其存储的方式都是由零开始向上递增存储,所以,如果要对内存中某一单元进行访问时,必须要有表示该存储单元的地址。在高级编程语言下,编译器最主要是作用之一就是要把可以理解的变量名改变为处理器可以理解的与之相对应的内存地址。   1.1堆栈。这是内存中的一个区域名称,主要用于存储值数据类型,在存储对象中,值数据类型进行调用时,首先将调用的所有方法传递到参数副本,在选择调用方法时,堆栈中存储的所有参数其实均为副本,所以在将值类型A传递到函数的过程中,A值是不会发生改变的。这与引用类型是不同的,引用类型一般会发生改变,主要是由于堆栈中所存储的是引用类型地址。   1.2托管堆。由于堆栈的功能强大,且性能相当高,但是其不足之处是变量的生命周期要求应该为嵌套,所以在对部分数据进行存储的时候过于苛刻。在此基础上产生了一种新的内存分配方式,即托管堆,该方法对部分数据的存储,并且保证了方法退出以后,在相当长的一段时间内,这些数据依然可以使用。该方法也简称为堆,是在内存中的另外一个区域内进行工作的。例如:   {   Customercustomer1;   Customer1=newCustomer()   Customercustomer2=newCustomer();   }   首先,声明一个Customer是customer1,然后在堆栈上对其进行存储分配。这里只是对其进行分配存储空间的引用,不是实际的对象,通过customer1占用的4字节空间对Customer对象在内存中的地址进行表示。进而执行第二行代码并完成操作。根据此例可以看出,引用类型的变量要比值类型变量建设过程复杂很多,且其性能下降的现象也不可避免。但是,可以采用将一个引用变量的值赋予另一个引用变量,其中一个出了作用域时,另一个会自动删除,而对象数据仍然存储在内存中,直到程序停止才会消失。如果将引用变量A传递给函数,也只是将变量A的引用进行了传递,换言之,也只是在堆栈上进行了内存的分配,即变量B,A和B所指向的内存地址是相同的,如果B改变,那么A也会随之改变。   1.3装箱及拆箱。在将值数据类型与引用数据类型项目相互进行转化的时候主要采用装箱及拆箱的方法,装箱的过程是将值数据类型转换为引用数据类型,拆箱则相反,是将引用数据类型转换为值数据类型。   1.4垃圾收集。一般而言,NET运行库在运行一段时间以后,会自动的将系统所产生的垃圾信息收集到垃圾收集器中,释放托管的资源,这在多数情况下能很好的解决垃圾信息占用大量内存的情况。然而对于一些特殊情况时,就需要垃圾回收器强制性的在代码的某一处进行内存的释放,这个时候就要用到System.GC,即垃圾收集器。垃圾收集器最主要的用处是在代码中存有大量的对象,在这些对象刚停止引用时使用。就堆栈和托管而言,首先堆栈填充的方向是向下,即从高内存地址向低内存地址存储,其工作原理是先将内存变量进行分配,然后再进行内存释放,采用的是先进后出的原则,自下而上的对变量进行释放,这种工作原理主要是为了保证堆栈的运行规则与其变量的生命周期不会发生矛盾与冲突。但是由于其性能过高造成的变量不够灵活的问题,人们都希望通过另外一种方法对内存进行分配,保证数据的存储及方法退出后数据在一定时间段内依然可以使用,托管堆的引入很好的解决了这一问题,该堆主要是指在.NET中,垃圾收集器进行自动管理,这与堆栈是完全不同的,托管堆采用自下向上的分配原则,将自有空间全部置于已用空间的上部。   2C#编程中内存管理的主要问题   内存分配是内存管理的第一个步骤,如何对其进行正确的分配,直接关系到程序运行的正确与否,因此必须对内存分配认真的对待。需要注意的是,在内存进行动态的分配过程中,是最容易出现问题的环节,所以在进行内存管理的时候,要对内存的动态分配过程更

文档评论(0)

gmomo-lt + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档