




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
AdvantagesofManagedCodeMicrosoftintermediatelanguageshareswithJavabytecodetheideathatitisalow—levellanguagewithasimplesyntax,whichcanbeveryquicklytranslatedintonativemachinecode。 Havingthiswell-defineduniversalsyntaxforcodehassignificantadvantages。PlatformindependenceFirst,itmeansthatthesamefilecontainingbytecodeinstructionscanbeplacedonanyplatform;atruntimethefinalstageofcompilationcanthenbeeasilyaccomplishedsothatthecodewillrunonthatparticularplatform.Inotherwords,bycompilingtoILWeobtainplatformindependencefor。NET,inmuchthesamewayascompilingtoJavabytecodegivesJavaplatformindependence。PerformanceimprovementILisactuallyabitmoreambitiousthanJavabytecode。ILisalwaysJust-In—Timecompiled(knownasJIT),whereasJavabytecodewasofteninterpreted。OneofthedisadvantagesofJavawasthat,onexecution,theprocessoftranslatingfromJavabytecodetonativeexecutableresultedinalossofperformance.Insteadofcompilingtheentireapplicationinonego(whichcouldleadtoaslowstart-uptime),theJITcompilersimplycompileseachportionofcodeasitiscalled(just-in—time).Whencodehasbeencompiled.once, theresultantnativeexecutableisstoreduntiltheapplicationexits,sothatitdoesnotneedtoberecompiledthenexttimethatportionofcodeisrun.Microsoftarguesthatthisprocessismoreefficientthancompilingtheentireapplicationcodeatthestart,becauseofthelikelihoodthatlargeportionsofanyapplicationcodewillnotactuallybeexecutedinanygivenrun。UsingtheJITcompiler, suchcodewillneverbecompiled.ThisexplainswhywecanexpectthatexecutionofmanagedILcodewillbealmostasfastasexecutingnativemachinecode.Whatitdoesn’texplainiswhyMicrosoftexpectsthatwewillgetaperformanceimprovement.Thereasongivenforthisisthat, sincethefinalstageofcompilationtakesplaceatruntime,theJITcompilerwillknowexactlywhatprocessortypetheprogramwillrunon.Thismeansthatitcanoptimizethefinalexecutablecodetotakeadvantageofanyfeaturesorparticularmachinecodeinstructionsofferedbythatparticularprocessor.实际上,IL比Java字节代码的作用还要大。IL总是即时编译的(简称JIT),而JaVa字节代码常常是解释型的,Java的一个缺点是,在运行应用程序时,把Java字节代码转换为内部可执行代码的过程可可能导致性能的损失。JIT编译器并不是把整个应用程序一次编译完(这样会有很长的启动时间),而是只编译它调用的那部分代码。代码编译过一次后,得到的内部可执行代码就存储起来,直到退出该应用程序为止,这样在下次运行这部分代码时,就不需要重新编译了。Microsoft认为这个过程要比一开始就编译整个应用程序代码的效率高得多,因为任何应用程序的大部分代码实际上并不是在每次运行过程中都执行。使用JIT编译器,从来都不会编译这种代码从来都不会被编译。这解释了为什么托管IL代码的执行几乎和内部机器代码的执行速度一样快,但是并没有说明为什么Microsoft认为这会提高性能。其原因是编译过程的最后一部分是在运行时进行的,JIT编译器确切地知道程序运行在什么类型的处理器上,利用该处理器提供的任何特性或特定的机器代码指令来优化最后的可执行代码。传统的编译器会优化代码,但它们的优化过程是独立于代码所运行的特定处理器的.这是因为传统的编译器是在发布软件之前编译为内部机器可执行的代码。即编译器不知道代码所运行的处理器类型,例如该处理器是x86兼容处理器或Alpha处理器,这超出了基本操作的范围。例如VisualStudio6优化了一台一般的Pentium机器,所以它生成的代码就不能利用PentiumIn处理器的硬件特性。相反,JrT编译器不仅可以进行VisualStudio6所能完成的优化工作,还可以优化代码所运行的特定处理器。Traditionalcompilerswilloptimizethecode,buttheycanonlyperformoptimizationsthatareindependentoftheparticularprocessorthatthecodewillrunon。Thisisbecausetraditionalcompilerscompiletonativeexecutablebeforethesoftwareisshipped.Thismeansthatthecompilerdoesn’tknowwhattypeofprocessorthecodewillrunonbeyondbasicgeneralities,suchasthatitwillbeanx86-compatibleprocessororanAlphaprocessor.VisualStudio6,forexample,optimizesforagenericPentiummachine,sothecodethatitgeneratescannottakeadvantageofhardwarefeaturesofPentiumIIIprocessors。Ontheotherhand,theJITcompilercandoalltheoptimizationsthatVisualStudio6can,andinadditionitwilloptimizefortheparticularprocessorthecodeisrunningon。LanguageinteroperabilityTheuseofILnotonlyenablesplatformindependence;italsofacilitateslanguageinteroperability。Simplyput,youcancompiletoILfromonelanguage,andthiscompiledcodeshouldthenbeinteroperablewithcodethathasbeencompiledtoILfromanotherlanguage。You’reprobablynowwonderingwhichlanguagesasidefromC#areinteroperablewith.NET,solet'sbrieflydiscusshowsomeoftheothercommonlanguagesfitinto。NET.VisualBasic.NETVisualBasic.NEThasundergoneacompleterevampfromVisualBasic6tobringitup—to—datewith。NET.ThewaythatVisualBasichasevolvedoverthelastfewyearsmeansthatinitspreviousversion,VisualBasic6,itwasnotasuitablelanguageforrunning。NETprogramsoForexample,itisheavilyintegratedintoCOMandworksbyexposingonlyeventhandlersassourcecodetothedeveloper—mostofthebackgroundcodeisnotavailableassourcecode.Notonlythat,itdoesnotsupportimplementationinheritance, andthestandarddatatypesVisualBasic6usesareincompatiblewith。NET。VisualBasic6wasupgradedtoVisualBasic。NET,andthechangesthatweremadetothelanguagearesoextensiveyoumightaswellregardVisualBasic。NETasanewlanguageoExistingVisualBasic6codedoesnotcompileasVisualBasic.NETcode。ConvertingaVisualBasic6programtoVisualBasic.NETrequiresextensivechangestothecode.However,VisualStudio.NET(theupgradeofVSforusewith.NET)candomostofthechangesforyou.IfyouattempttoreadaVisualBasic6projectintoVisualStudio.NET,itwillupgradetheprojectforyou,whichmeansthatitwillrewritetheVisualBasic6sourcecodeintoVisualBasic。NETsourcecode。Althoughthismeansthattheworkinvolvedforyouisheavilycutdown,youwillneedtocheckthroughthenewVisualBasic。NETcodetomakesurethattheprojectstillworksasintendedbecausetheconversionmightnotbeperfect。OnesideeffectofthislanguageupgradeisthatitisnolongerpossibletocompileVisualBasic.NETtonativeexecutablecode.VisualBasic。NETcompilesonlytoIL,justasC#does.IfyouneedtocontinuecodinginVisualBasic6,youmaydoso,buttheexecutablecodeproducedwillcompletelyignorethe。NETFramework,andyou'llneedtokeepVisualStudio6installedifyouwanttocontinuetoworkinthisdeveloperenvironment.^uopŋɔɪɪddŋqoMIBNoJSVSujpU∏QIOJ#fəsnueɔnoA弗q】suŋəuɪsɪ^ɪoəsnsəsŋnguŋɪjuŋɪɪduɪoɔJJHN'əɪpJθjsəɪoψ弗q]səuŋɪgɪɪssŋɪɔoseqəuɪŋsoq]səsn#f'səuŋjgɪɪəuɪpunɪŋʌŋfoψyspə]ə^re]SupqjopŋəjsujIHNoqjiMψθMojμιeMAoqjjɪ#fəsnojjsəɪsŋə其PUyɪɪɪʌvsɪəsn++fjsouɪ]eq]s]ɔədXəyosojoτp∖[^iaN^o!PmSɪŋnsɪʌjosəɪnjŋəjɪŋnsnoψɪɪŋjoə加UeAPeə那]ojəɪgŋəɪesɪəsn#fζsτqjjoəsnŋɔəg•斗IOMəuɪeɪmJJHNoəɪpOjUTj∣mqsɪəsŋnguŋɪ#foq]MONOPeO[UM0pəjŋjŋdəsŋ既UP(euiɪəʧŋ^ɪuo#fəsnojəɪgŋəɪəMsɪəsnXlOMəuɪeɪm1HN^0Ii。!Ido13NΓlWιsJΛsJx!uιəɪɪlo]pəppŋoqojəsŋnguŋɪjsəjŋɪə^ɪ13N,ttΓ∣e∩S!Λ,(JJHNoɔɪsŋgɪŋnsɪʌjo#ɔseqons)əsŋnguŋɪιoqjoəuɪosuɪəpoɔəɔmosJnOXəiijmo]pəəu∩ζnoXuoq],əjŋsəd人]AjouiouiSeXqɔəqjAqpəzɪusoɔəjsɪəpoɔj∏oA弗q]juŋjɪoduɪɪsjτjiOSIs。]Xχ9jBSOdXlXjouisuis4^∏qoqιssŋd∏tmysψəpoɔəjŋjəuəsojəɪgŋjousɪjəɪɪduɪoɔ++ɔoqjiuoosPUeuopŋɪndɪuŋuɪjəjuɪodɪəʌəɪ—ʌvoɪjosuɪɪəjuɪSMOUe++ɔ]呻uɪopəəjjoq]joəsnŋɔəg^səssŋɪɔpəsŋuŋuiSmsnuəqm(əpoɔsnoɪʌəjdoq]uɪUMOqSPlOMKəX —oq]Seqons)səɪnjŋəj++ɔPlePUe]suouəsnOJpəəuɪɪɪʌvnoA弗q]puɪjosɪŋɪɪɪʌvnoʌ,(səssŋɪɔjoəɔuŋjuəquɪəɪdpɪnuɪjosəjŋɪduɪəj'ə[duIeXəIOJ)səd^jpəsŋuŋuɪuoJJHNoKqpəjɪoddnsjouəɪe弗q]səɪnjŋəjəsnoj]duɪə口enoAjɪɪouəUesəsɪŋjjəɪɪduɪoɔə^ɪodoɪəjuɪW(ɔɔojjjosəjoj即AeqjnoqjiMəpoɔ++ɔpəsŋuŋuɪUiOJjsəssŋɪɔ++ɔpəsŋuŋuɪunɪɪŋɔueɔəMysψsɪəpoɔ#ɔɪəAO++ɔpəsŋuŋuɪSmsnjoə加UeAPeəɪɪl^13Noɔɪsŋgɪŋnsiʌiouιssŋɪɔ9ψus^umpζnoXjιsbχsnf^sŋɪɔpəsŋuŋuɪŋnoAəʌɪsɪɪɪʌv^^^^^^∙}sse[ɔ人wssŋɪɔɔs-:əpoɔoψsŋəjə^ʌv'ssŋɪɔ++ɔuɪŋɪdŋsəuɪjəp}sse[ɔ^wssŋɪɔ:əpoɔ++ɔpəsŋuŋuɪəmSnqJJ。əpoɔ++ɔjπoAuɪsəd人]pəsŋuŋuɪunPUesəd人1pəsŋuŋuɪxτuιueɔnoA弗q]suŋəuɪsɪ^ɪP[qe]∏ooXəəʌpŋupəppəguɪəUesuɪŋjuoɔysψqjjɪuɪəueɔjəɪɪduɪoɔoq],əpoɔpəsŋuŋuɪojəɪɪduɪoɔnoAuəqmysψsɪ++ɔ]∏OqeSmψsupsəjəjuɪə^ɪ。əpoɔəuppeuɪəʌpŋujopŋəjsuɪqjjɪuɪəəɔuə^ɪɪɪʌvPUe'əpoɔpəsŋuŋuɪojəɪɪduɪoɔojμιeMnoA弗q]səuɪnssŋuoq]qoτqM'jəɪɪduɪoɔoq]ojjɪɔ/sŋɪjoq]SSedosɪŋueɔnoʌ(∏p∙qτμoosuι>§msn#:əpoɔjπoAjoSmumSoqoq]ojəuɪɪSutmo∏ojoψPPeA∣duιτsueɔnoAuoq]工IOMəuɪeɪmIHNoəɪpuτqjiMuπjojəpoɔ++ɔjπoAMnoAJloəuɪpunɪJJHN'əɪpJOApuopuodopmUnlɪɪɪʌv具弗q]uəAəMOq'suŋəuɪosɪŋji。uopŋɔɪjɪpouɪjnoqjiMəpoɔə[ge]nɔəXəəʌpŋuojəɪɪduɪoɔojənupuoɔɪɪɪʌvəpoɔəɔɪnos++ɔSuμsτxo弗q]suŋəuɪsɪ^ɪNlOMəuɪeɪmJJHNoəɪpJioddnsojpəppŋuəəgəʌŋqSUO[suə]Xəζia^[^++ɔɪŋnsɪʌq】!MoSMOPU!丛uoSUO[suə]Xəɔɪjɪɔəds-ʧosojɔɪ]ʌ[jojoquιnuə^ɪŋɪŋPeq^pŋəɪɪŋ9++ɔɪŋnsɪʌ13N,++ɔ∣e∩S!ΛWindowsForms,XMLWebservices,andeverythingelsethatispossible-justasC#andVisualBasic.NETcan.ScriptinglanguagesScriptinglanguagesarestillaround,although,ingeneral,theirimportanceislikelytodeclinewiththeadventof。NET。JSCriPt,ontheotherhand,hasbeenupgradedtoJSCriPt。NET.WecannowwriteASP.NETpagesinJScript.NET,runJScript。NETasacompiledratherthananinterpretedlanguage,andwritestronglytyPedJSCriPt.NETCode.WithASP.NETthereisnoreasontousesCriPtinglanguagesinserversideWebpages。VBAis,however,stillusedasalanguageforMicrosoftOfficeandVisualStudiomacros.COMandCOM+Technicallyspeaking,COMandCOM+aren’ttechnologiestargetedat.NET,becausecomponentsbasedonthemcannotbecompiledintoIL(althoughit’spossibletodosotosomedegreeusingmanagedC++,iftheoriginalCOMcomponentwaswritteninC++).However,COM+remainsanimportanttool,becauseitsfeaturesarenotduplicatedin.NET.AlSoCOMcomponentswillstillwork-and。NETincorporatesCOMinteroperabilityfeaturesthatmakeitpossibleformanagedcodetocallupCOMcomponentsandviceversa(thisisdiscussedinChapter29)。Ingeneral,however,youwillprobablyfinditmoreconvenientformostpurposestocodenewcomponentsas.NETcomponents,sothatyoucantakeadvantageofthe。NETbaseclassesaswellastheotherbenefitsofrunningasmanagedcode。托管代码的优点Microsoft中间语言与Java字节代码共享一种理念:它们都是一种低级语言,语法很简单,可以非常快速地转换为机器码.对于代码来说,这种精心设计的通用语法,有很大的优点。平台无关性首先,这意味着包含字节代码指令的同一个文件可以放在任一个平台中,运行时编译过程的最后阶段可以很容易完成,这样代码就可以运行在该特定的平台上。也就是说编译为中间语言就可以获得.NET平台无关性,这与编译为JaVa字节代码就会得到JaVa平台无关性是一样的。提高性能实际上,IL比Java字节代码的作用还要大。IL总是即时编译的(简称JIT),而Java字节代码常常是解释型的,Java的一个缺点是,在运行应用程序时,把Java字节代码转换为内部可执行代码的过程可可能导致性能的损失。JIT编译器并不是把整个应用程序一次编译完(这样会有很长的启动时间),而是只编译它调用的那部分代码(这是其名称由来)。代码编译过一次后,得到的内部可执行代码就存储起来,直到退出该应用程序为止,这样在下次运行这部分代码时,就不需要重新编译了。Microsoft认为这个过程要比一开始就编译整个应用程序代码的效率高得多,因为任何应用程序的大部分代码实际上并不是在每次运行过程中都执行。使用JIT编译器,从来都不会编译这种代码。这解释了为什么托管IL代码的执行几乎和内部机器代码的执行速度一样快,但是并没有说明为什么Microsoft认为这会提高性能.其原因是编译过程的最后一部分是在运行时进行的,JIT编译器确切地知道程序运行在什么类型的处理器上,利用该处理器提供的任何特性或特定的机器代码指令来优化最后的可执行代码。传统的编译器会优化代码,但它们的优化过程是独立于代码所运行的特定处理器的.这是因为传统的编译器是在发布软件之前编译为内部机器可执行的代码。即编译器不知道代码所运行的处理器类型,例如该处理器是x86兼容处理器或Alpha处理器,这超出了基本操作的范围。例如VisualStudio6优化了一台一般的Pentium机器,所以它生成的代码就不能利用PentiumIII处理器的硬件特性。相反,JrT编译器不仅可以进行VisualStudio6所能完成的优化工作,还可以优化代码所运行的特定处理器.语言的互操作性使用IL不仅支持平台无关性,还支持语言的互操作性.简言之,就是能将任何一种语言编译为中间代码,编译好的代码可以与从其他语言编译过来的代码进行交互操作.那么除了C#之外,还有什么语言可以通过。NET进行交互操作呢?下面就简要讨论其他常见语言如何与.NET交互操作.VB0NETVisualBasic6在升级到ViSUalBasic.NET时,经历了一番脱胎换骨的变化。VisualBasic是在最近的几年中演化的,其早期版本VisualBasic6并不适合运行。NET程序.例如,它与COM的高度集成,且只把事件处理程序作为源代码显示给开发人员,大多数后台代码不能用作源代码。另外,它不支持继承,VisualBasic使用的标准数据类型也与。NET不兼容。VisualBasic6已经升级为VisualBasic.NET,对VB进行的改变非常大,完全可以把VisualBasic.NET当作是一种新语言。现有的VB6代码不能编译为VBoNET代码,把VB6程序转换为VB。NET时,需要对代码进行大量的改动,但大多数修改工作都可以由VisualStudiooNET(VS的升级版本,用于与.NET一起使用)自动完成.如果要把一个VB6项目读取到VisualStudio。NET中,VisualStudio。NET就会升级该项目,也就是说把VB6源代码重写为VBoNET源代码。虽然这意味着其中的工作已大大减轻,但用户仍需要检查新的VB.NET代码,以确保项目仍可正确工作,因为这种转换并不十分完美。这种语言升级的一个副作用是不能再把VB.NET编译为内部可执行代码了。VB.NET只编译为中间语言,就像C#一样。如果需要继续使用VB6编写程序,就可以这么做,但生成的可执行代码会完全忽略。NETFrameWork,如果继续把VisualStudio作为开发环境,就需要安装VisualStudio6。VisualC++.NETVisualC++6有许多Microsoft对Windows的特定扩展。通过VisualC++。NET,又加入了更多的扩展内容,来支持。NETFra
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大学生创业计划书与路演
- 餐饮电话预订流程
- 丰富的CFA考试试题及答案库
- CFA考试风险管理实务与试题及答案
- 介绍艺术家课件
- 大学疫情防控课件下载
- 骨筋膜室综合征观察与护理
- 高血压脑出血病人的术后护理查房
- 思政知识竞赛复习测试卷附答案
- 多重耐药菌防控知识课件
- 中央戏剧学院招聘考试真题2024
- 专题07力、运动和-5年(2020-2024)中考1年模拟物理真题分类汇编(天津专用)(带答案解析)
- (一模)淄博市及滨州市2024-2025学年度高三模拟考试语文试卷(含答案)
- 2025年云南省中考语文试题解读及复习备考指导(深度课件)
- 陕西省安康市2024-2025学年高三下学期第二次质量考试(二模)地理试题(含答案)
- 2025年宁波城市职业技术学院单招职业技能测试题库新版
- 人工智能基础 课件 10.3 制作数字人
- 重庆礼嘉智慧公园极客社区项目总体规划国际竞赛投标方案
- 爆破安全规程
- 《马克思主义基本原理》考试题库及答案(400题)
- 小班语言活动《莴苣姑娘》课件
评论
0/150
提交评论