




已阅读5页,还剩152页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章.NET框架,目录,一、软件框架与架构的关系二、软件发展概述三、C#介绍四、.NET框架五、.NET应用程序管理,一、软件框架与架构的关系,为什么要用框架?因为软件系统发展到今天已经很复杂了,特别是服务器端软件,设计到的知识,内容,问题太多。在某些方面使用成熟的框架,可以避免重复做已有的基础工作,而只需要集中精力完成系统的业务逻辑设计。框架一般是成熟,稳健的,可以处理系统很多细节问题,比如,事物理,安全性,数据流控制等问题。框架一般都经过很多人使用,所以结构很好,所以扩展性也很好,而且它是不断升级的,使用框架的开发者可以直接享受别人升级代码带来的好处。框架一般处在低层应用平台(如J2EE)和高层业务逻辑之间的中间层。,一、软件框架与架构的区别,常见框架常见的JAVA框架常见的.Net框架其它基于C+的框架,一、软件框架与架构的关系,什么是框架?框架,即framework。是某种应用的半成品,就是一组组件,供选用完成自己的系统。简单说就是使用别人搭好的舞台,你来做表演。而且,框架一般是成熟的,不断升级的软件。框架与架构的区别?并无明确的定义,但一般从层的观点看,认为框架是底层的,接近系统的。软件开发者在其上构建自己的软件架构,开发自己的运用程序。,一、软件框架与架构的关系,进一步展开:框架是可以通过某种回调机制进行扩展的软件系统或子系统的半成品框架技术有助于把通用关注点和专用关注点分离框架是软件,架构不是软件框架也有架构子系统也需要经过架构设计,一、软件框架与架构的关系,起点,架构(抽象解决方案),框架(半成品),最终完整解决方案,先构建通用半成品,规划抽象解决方案,再实现细节,再实现特定部分,框架也需要架构设计,将系统或子系统架构框架化,第章:绪论,二、软件发展概述,FORTRAN,FORTRAN77,FORTRAN90,FORTRAN95,Cobol,Algol,Lisp,Algol60,Pascal,Module-2,Oberon,C,C+,Ada,Simula,Simula67,SmallTalk,Eiffel,Java,C#,PL/1,Basic,VisualBasic,1960,1965,1970,1975,1980,1985,1990,1995,2000,已经有众多软件开发语言:面向过程和面向对象,为什么还要开发C#以及.NET技术?,Why?,软件发展历程,早期:数据结构+算法,软件服务,其它服务,智能客户机,智能设备,智能浏览器,业务逻辑和Web服务,OS服务,公用Web服务,模块建构服务,因特网服务,服务器主机,应用成为可编程Web服务,开放因特网通信协议,(HTTP、SMTP、XML、SOAP),Web服务应用端,Web服务提供端,三、C#介绍,C#isasimple,modern,objectoriented,andtype-safeprogramminglanguagederivedfromCandC+.ItwillimmediatelybefamiliartoCandC+programmers.C#aimstocombinethehighproductivityofVisualBasicandtherawpowerofC+.,ChiefDesignerofC#,TurboPascal,DelphiandVisualJ+,主要特点,简单性:现代性:面向对象性:类型安全性:相互兼容性:可伸缩性和可升级性:,简单性:C#语言中,在缺省情况下,用户的编程操作更加简单。其具体表现在:(1)C#中指针的操作被限制,虽仍能够使用,但在缺省情况下,不允许直接对内存进行操作。这样,在C+中所疯狂使用的操作符,如:“:”和“-”都不再使用,在C#中只支持一个操作符“.”。(2)C#基于.NET平台的,可以实现自动内存管理和垃圾回收。(3)在C#中,整形数值0和1不再作为布尔值出现。C#中的布尔值是纯粹的true和false值而且没有更多的=操作符和=操作符错误。=被用于进行比较操作而=被用做赋值操作。,现代性:C#语言是微软为了其推出的.NET平台而开发的一门高级语言,其具有很强的现代性。其具体表现在:(1)C#是建立在当前的潮流上,对于创建相互兼容的,可伸缩的,健壮的应用程序来说是非常强大和简单的。(2)C#拥有内建的支持来将任何组件转换成一个webservice,运行在任何平台上的任何应用程序都可以通过互联网来使用这个服务。,面向对象性:C#语言是一种真正的面向对象语言,其具体体现在:(1)C#中提供了装箱和拆箱机制,这样,使C#的类型系统中,每一个类型都可以看作是一个对象。(2)C#只允许单继承,即一个类只能有一个基类,从而避免了类型定义的混乱。(3)整个C#的类模型是建立在.NET虚拟对象的基础上,其对象模型是.NET框架的一部分。,类型安全性:C#语言具有很强的自保护功能,其表现在:(1)在C#中我们不能进行不安全的类型转换象将double转换成boolean。(2)值类型(常量类型)被初始化为零值而引用类型(对象和类被编译器自动初始化为零值。(3)数组类型下标从零开始而且进行越界检查。(4)类型溢出将被检查。,相互兼容性:C#语言有很强的兼容性,在其集成开发环境中,各种语言可以进行交叉使用,体现在:(1)C#提供对COM和基于windows的应用程序的原始的支持。(2)允许对原始指针的有限制的使用。(3)用户不再需要显式的实现unknown和其它COM界面,这些功能已经内建。(4)C#允许用户将指针作为不安全的代码段来操作老的代码。(5)VB.NET和其它中间代码语言中的组件可以在C#中直接使用。,可伸缩性和可升级性:C#语言为用户提供了方便的升级管理。(1).NET引入了零部件的概念,它们通过其手册具有自描述的功能。手册确立了零部件的身份,版本,语言和数字签名等。零部件不需要在任何地方注册。(2)扩展程序,只需要删除老的文件并用新的文件来升级它们。不需要注册动态链接库。(3)C#在语言中支持版本修改。对界面和方法重载的支持使得复杂的程序框架能随着时间发展和进化。,对比HelloWorld!,#includeintmain(void)printf(hello,worldn);,#includeintmain()std:cout“项目”,弹出“新建项目”对话框。(2)单击左侧的项目类型安装和部署项目,选择右侧的安装向导模板,输入项目名称testsetup,指定一个项目位置,(3)单击“确定”按钮(4)单击“下一步”按钮,选择安装项目类型以及重新发布的打包类型。(5)保留默认的选项,单击下一步按钮,出现向导第3步对话框。单击添加按钮,在弹出的添加文件对话框中,将前面的test.exe应用程序可执行文件添加进来,(6)单击完成按钮,系统开始创建。,生成和测试安装文件,(1)打开生成菜单,单击生成解决方案,系统就会在指定项目位置下的”生成testsetup”中为该安装项目生成一个testsetup安装文件。,(2)在解决方案资源管理器中,右击顶层节点testsetup,从弹出的快捷菜单中单击安装,启动WindowsInstaller,进行应用程序的安装过程。开始出现的是安装欢迎对话框,,(3)单击“下一步”按钮,进入“选择安装文件夹”对话框(4)单击“下一步”按钮,进入“确认安装”对话框(5)单击下一步按钮,系统开始安装,并显示安装进度,最后显示安装完成对话框,(6)单击关闭按钮,退出安装。这就是testsetup默认的安装过程。,到此为止,一个简单的应用部署就完成了。另外,VisualStudio.NET还提供了很多其他功能,如使用自己的标题图像、添加“序列号”对话框及生成程序菜单项和桌面图标等等,同学们可以自己摸索,当然也可查阅其他资料,这里就不详细介绍了。一旦安装项目制作好以后就可以把项目文件夹下Debug中的文件制成安装盘发布了。,5.4内存管理,7.4.1.Net运行时的内存分配7.4.2.NET内存管理的核心垃圾回收机制7.4.3代龄机制7.4.4非托管资源的管理,C+常见内存分配错误,1.内存分配未成功,却使用了它2.内存分配虽然成功,但是尚未初始化就引用它3.内存分配成功并且已经初始化,但操作越过了内存的边界。,4.忘记了释放内存,造成内存泄露。含5.释放了内存却继续使用它,5.4.1.Net运行时的内存分配,托管堆概念.NET框架包含一个托管堆,所有的.NET语言在分配引用类型对象时都要使用它。像值类型这样的轻量级对象始终分配在栈中,但是所有的类实例和数组都被生成在一个内存池中,这个内存池就是托管堆。,下图演示了一个包括3个对象的托管堆:A、B、C。如果再分配新的对象,它将被放在NextObjPtr指针所指示的位置(紧接着对象C之后)。,A,B,C,托管堆,5.4.2.NET内存管理的核心垃圾回收机制,在清楚了.NET内存分配方法后,我们认识到托管堆这种分配方法大多数时候是非常快的。而一个实际系统的内存总是有限的,当系统的剩余的可分配的内存资源不多时,.Net运行时便会“预见”到下面的内存资源将可能不会满足下面的内存分配请求,于是它便会开始执行垃圾回收释放那些系统不再引用的内存资源,现在我们来学习一下垃圾收集的全过程。当垃圾收集器开始执行,它首先假设托管堆中所有的对象都是可收集的垃圾。然后垃圾收集器遍历所有的根,构造出一个包含所有可达对象的图。如下图展示了一个分配有几个对象的托管堆,,我们从中可以看出垃圾收集器在遍历所有的根后,找到了根直接引用的对象A、C、D、F,但是找到D对象后,发现它的根引用了H对象的根,所以也要把H对象也要放入到对象可达图中。垃圾收集器一旦检查宛所有的根,其得到的可达对象图将包含所有从应用程序的根可以访问的对象。任何不在该图中的对象都是应用程序不可访问的对象,因此也是可以被执行垃圾收集的对象。上图中,垃圾收集后的对象只剩下A、C、D、F、H,原来托管堆中的对象B、I已经当垃圾处理掉了,图7-25垃圾收集后托管堆对象示意图,5.4.3代龄机制,代龄机制是旨在提高垃圾收集器性能的一种机制。这种机制基于下面三点假设:,对象越新,其生存期越短对象越老,其生存期越长对托管堆的一部分执行垃圾收集要比对整个托管堆执行垃圾收集速度更快,代龄机制演示(1/10),托管堆,1.初始化托管堆,此时不含有任何的对象,CLR为每代对象选择初始阙值容量(假设第0代对象阙值容量为256K,第1代为2M,第2代为5M),代龄机制演示(2/10),托管堆,2.应用程序分配了5个对象A-E,此时它们为第0代对象,A,B,C,D,E,第0代,代龄机制演示(3/10),托管堆,3.运行一段时间后,对象C和E变为垃圾对象(不再使用),此时要分配新的对象。CLR检测到第0代对象所占的内存空间超过其阙值256K,所以启动垃圾收集器将C和E回收,且压缩D使之邻近于B,A,B,C,D,E,第0代,代龄机制演示(4/10),托管堆,4.执行垃圾收集后的状态,对象A、B和D提升为第1代,A,B,D,第1代,代龄机制演示(5/10),托管堆,5.执行垃圾收集后的状态,对象A、B和D提升为第1代应用程序又分配了对象F-K,它们为第0代,过了一段时间,B、H和J成为垃圾对象,A,B,D,第1代,K,F,G,H,I,J,第0代,代龄机制演示(6/10),托管堆,6.当又要分配新的对象时,CLR检测到第0代对象所占空间已经超过其阙值,进行垃圾收集,但第1代对象没有超过其阙值(2M),所以即使对象B已经成为垃圾对象,但此次收集并不会回收其所占用的内存空间。所有对象代龄都提升为第1代,第0代对象空缺,A,B,D,第1代,K,F,G,I,代龄机制演示(7/10),托管堆,7.重复以上步骤,应用程序继续分配对象,L-O,一段时间后对象G、L和M成为垃圾对象,进行垃圾收集后将剩下的对象归并到第1代,假设此时第1代对象已经达到其阙值2M,A,B,D,第1代,K,F,G,I,N,O,代龄机制演示(8/10),托管堆,8.继续分配新的对象P-S,且一段时间后对象A、K、P和R变为垃圾对象,此时如果再要分配新的对象T,CLR检测到第1代对象和第2代对象均超过其阙值,A,B,D,第1代,K,F,G,I,N,O,P,Q,R,S,第0代,代龄机制演示(9/10),托管堆,9.垃圾收集器对第1代和第0代对象进行垃圾收集,释放对象A、B、G、P、R所占用的内存空间,并提升代龄,D,第2代,F,I,N,O,Q,S,第1代,第0代,代龄机制演示(10/10),托管堆,10.重复以上各步,D,第2代,F,I,N,O,Q,S,第1代,第0代,.NET代龄机制,在.NETFramewok中CLR将托管堆分为三代:第0代,第1代,第2代。当CLR初始化时,为这三代选择3个阙值容量。分别为256k,2MB,10MB。阙值容量越大,垃圾执行的频率也就越低。,CLR的垃圾收集器还是一个自调节的垃圾收集器垃圾收集器会调整各个代的阙值容量,从而达到提高应用程序性能的目的。,5.4.4非托管资源的管理,Finalization终止化操作Dispose,非托管资源:例如文件句柄、Socket链接等)或者需要特别关照的对象(例如Bitmap对象等),非托管资源管理的必要性:将所有的事情都交给GC有时会损及程序的效率,严重的甚至可能导致错误。,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汽修一级考试题库及答案
- 中医病因考试题目及答案
- 2025年广州中小学教师心理健康B证班结业考试题目及答案
- 检验技术员考试题及答案
- 科学数学考试卷子及答案
- 中国现代史考试题及答案
- 农民专业合作社与土地承包合同
- 规范税收缴纳承诺书8篇范文
- 合同管理标准化文件模板汇编
- 人员面试笔试题库及答案
- 新版中华民族共同体概论课件第七讲华夷一体与中华民族空前繁荣(隋唐五代时期)-2025年版
- 急性淋巴细胞白血病
- 围墙装饰墙帽施工方案
- 燃气运营安全管理方案
- 2025-2026学年粤教粤科版(2024)小学科学二年级上册(全册)教学设计(附目录)
- 倒睫科普课件
- (高清版)DBJ∕T 13-318-2025 《建筑施工盘扣式钢管脚手架安全技术标准》
- 思想道德与法治2023年版电子版教材-1
- T/CIE 176-2023机场探鸟雷达系统技术要求
- 《机械基础(第二版)》中职全套教学课件
- 国网投标离线投标工具使用说明
评论
0/150
提交评论