仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 689|回复: 7
打印 上一主题 下一主题

[学习教程] ASP.NET网页编程之.NET中的内存办理,GC机制,内存开释过...

[复制链接]
深爱那片海 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:18:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
说句实话,Java跨平台根本就不是外行人想想的那种,一次编译,处处运行。弁言
作为一个.NET程序员,我们晓得托管代码的内存办理是主动的。.NET能够包管我们的托管程序在停止时全体开释,这为我们编程职员省往了很多贫苦,我们能够连想都不想怎样往办理内存,归正.NET本人会包管统统。好吧,有事理,有必定的事理。成绩是,当我们用到非托管资本时.NET就不克不及主动办理了。这是由于非托管代码不受CLR(CommonLanguageRuntime)把持,超越CLR的办理局限。那末怎样处置这些非托管资本呢,.NET又是怎样办理并开释托管资本的呢?
主动内存办理和GC
在原始程序中堆的内存分派是如许的:找到第一个有充足空间的内存地点(没被占用的),然后将该内存分派。当程序不再必要此内存中的信息时程序员必要手动将此内存开释。堆的内存是公用的,也就是说一切历程都有大概掩盖另外一历程的内存内容,这就是为何良多计划不妥的程序乃至会让操纵体系自己都down失落。我们偶然碰着的程序稀里糊涂的逝世失落了(随机征象),也是由于内存办理不妥引发的(大概因为自己程序的内存成绩或是外来程序酿成的)。另外一个罕见的实例就是人人常常看到的游戏的Trainer,他们经由过程间接修正游戏的内存到达"无敌"的效果。分明了这些我们能够设想假如内存地点被用凌乱了的话会何等伤害,我们也能够设想为何C++程序员(某些)一提起指针就头疼的缘故原由了。别的,假如程序中的内存不被程序员手动开释的话那末这个内存就不会被从头分派,直到电脑重起为止,也就是我们所说的内存泄露。所说的这些是在非托管代码中,CLR经由过程AppDomain完成代码间的断绝制止了这些内存办理成绩,也就是说一个AppDomain在一样平常情形下不克不及读/写另外一AppDomain的内存。托管内存开释就由GC(GarbageCollector)来卖力。我们要进一步报告的就是这个GC,可是在这之前要先讲一下托管代码中内存的分派,托管堆中内存的分派是按次的,也就是说一个挨着一个的分派。如许内存分派的速率就要比原始程序高,可是凌驾的速率会被GC找归去。为何?看过GC的事情体例后你就会晓得谜底了。
GC事情体例
起首我们要晓得托管代码中的工具甚么时分接纳我们管不了(除非用GC.Collect强制GC接纳,这不保举,前面会申明为何)。GC会在它"乐意"的时分实行一次接纳(这有很多缘故原由,好比内存不敷用时。如许做是为了进步内存分派、接纳的效力)。那末假如我们用Destructor呢?一样不可,由于.NET中Destructor的观点已不存在了,它酿成了Finalizer,这会在前面讲到。今朝请记着一个工具只要在没有任何援用的情形下才干够被接纳。为了申明这一点请看上面这一段代码:
[C#]
objectobjA=newobject();
objectobjB=objA;
objA=null;
//强制接纳。
GC.Collect();
objB.ToString();
<p>[VisualBasic]
DimobjAAsNewObject()
DimobjBAsObject=objA
objA=Nothing
强制接纳。
GC.Collect()
objB.ToString()
这里objA援用的工具并没有被接纳,由于这个工具另有另外一个援用,ObjB。
工具在没有任何援用后就有前提被接纳了。当GC接纳时,它会做以下几步:
断定工具没有任何援用。有时也搞不懂应该学那种;主要看你以后去的那个公司是使用哪种了。就像王千祥的课上说的:企业应用现在主要就三层(其实也差不多就是MVC):表示层(主要使用html写的,很简单)、业务逻辑层(主要就是应用服务器的)。最后就是数据层(其实就是学习数据库)
精灵巫婆 该用户已被删除
沙发
发表于 2015-1-18 05:44:13 | 只看该作者
我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。
深爱那片海 该用户已被删除
板凳
 楼主| 发表于 2015-1-21 12:26:50 | 只看该作者
众所周知,Windows以易用而出名,也因此占据不少的服务器市场。
愤怒的大鸟 该用户已被删除
地板
发表于 2015-1-30 18:16:32 | 只看该作者
市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。
若天明 该用户已被删除
5#
发表于 2015-2-16 17:09:55 | 只看该作者
主流网站开发语言之PHPHP的全名非常有趣,它是一个巢状的缩写名称——“PHP:HypertextPreprocessor”,打开缩写还是缩写。PHP是一种HTML内嵌式的语言(就像上面讲的ASP那样)。而PHP独特的语法混合了C,Java,Perl以及PHP式的新语法。它可以比CGI或者Perl更快速地执行动态网页。
谁可相欹 该用户已被删除
6#
发表于 2015-3-5 07:37:14 | 只看该作者
ASP是把代码交给VBScript解释器或Jscript解释器来解释,当然速度没有编译过的程序快了。
老尸 该用户已被删除
7#
发表于 2015-3-12 01:25:08 | 只看该作者
比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变。
简单生活 该用户已被删除
8#
发表于 2015-3-19 17:29:36 | 只看该作者
虽然在形式上JSP和ASP或PHP看上去很相似——都可以被内嵌在HTML代码中。但是,它的执行方式和ASP或PHP完全不同。在JSP被执行的时候,JSP文件被JSP解释器(JSPParser)转换成Servlet代码,然后Servlet代码被Java编译器编译成.class字节文件,这样就由生成的Servlet来对客户端应答。所以,JSP可以看做是Servlet的脚本语言(ScriptLanguage)版。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-6-8 08:12

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表