.NET FRAMEWORK的知识点

2021-03-01 11:29

阅读:615

标签:变量类型   code   不能   microsoft   电脑   delete   work   compiler   经历   

  1. 理解  .NET Framework代码的编译

           一般App(应用程序)编译过程

           技术图片

        .NET App(应用程序)编译过程

         技术图片

        2.理解什么是CIL?

    CIL:在编译使用.NET Framework库的代码时,不是立即创 建专用于操作系统的本机代码,而是把代码编译为通 用中间语言(Common Intermediate                 Language)。这些代码并非专门用于任何一种操作系统,也非专门 用于C#及其他.NET语言,如Visual Basic .NET也可以在第一阶段编译为这种语言,                开发C#应用程序时,这个 编译步骤由IDE完成。

  3.理解什么是程序集? 

             在编译应用程序时,所创建的CIL代码存储在一 个程序集中。程序集包括可执行的应用程序文件(exe)和其他应用程序使用的库(dll)

             程序集包含了两种文件:可执行文件(.exe文件)和 类库文件(.dll文件)。

        在VS开发环境中,一个解决方案可以包含多个项目,而每个项目就是一个程序集。

        应用程序结构:包含 应用程序域(AppDomain),程序集(Assembly),模块(Module),类型(Type),成员(EventInfo、FieldInfo、             MethodInfo、PropertyInfo) 几个层次。

       他们之间是一种从属关系,也就是说,一个AppDomain能够包括N个Assembly,一个Assembly能够包括N个Module,一个Module能够包括N个Type,        一个Type能够包括N个成员。他们都在System.Reflection命名空间下。

            从【应用程序结构】中不难看出程序集Assembly的组成:

      技术图片

  4.理解什么是JIT编译器?

      JITJIT编译器,英文写作Just-In-Time Compiler,中文意思是即时编译器。JIT编译器能够将CIL编译成为各种不同的机器代码,以适应对应的系统平            台,最终使得程序在目标系统中得到顺利地运行。

  5.理解什么是托管代

    托管代码(Managed Code)就是中间语言(IL)代码,在公共语言运行库(CLR)中运行。编译器把代码编译成中间语言,当方法被调用时,CLR       把具体的方法编译成适合本地计算机运行的机器码,并且将编译好的机器码缓存起来,以备下次调用使用。随着程序集的运行,CLR提供各种    服务:内存管理,安全管理,线程管理,垃圾回收,类型检查等等。

    托管代码是一microsoft的中间语言(IL),他主要的作用是在.NET FRAMEWORK的公共语言运行库(CLR)执行代码前去编译源代码,也就是说托管代    码充当着翻译的作用,源代码在运行时分为两个阶段:      

  1.源代码编译为托管代码,(所以源代码可以有很多种,如VB,C#,J#)      

  2.托管代码编译为microsoft的平台专用语言。

    编译器把代码编译成中间语言(IL),而不是能直接在你的电脑上运行的机器码。中间语言被封装在一个叫程序集(assembly)的文件中,程序集中包含了描述你所创建的类,方法和属性(例如安全需求)的所有元数据。你可以拷贝这个程序集到另一台服务器上部署它。

什么是非托管代码(unmanaged code)?  

  非托管代码,直接编译成目标计算机码,在公共语言运行库环境的外部,由操作系统直接执行的代码,代码必须自己提供垃圾回收,类型检查,安全支持等服务。如需要内存管理等服务,必须显示调用操作系统的接口,通常调用Windows SDK所提供的API来实现内存管理。

  当项目选择名字以MFCATLWin32开头的项目类型,那么这个项目所产生的就是非托管程序。

 

  托管代码和非托管代码的区别:

 

     1、托管代码是一种中间语言,运行在CLR上;非托管代码被编译为机器码,运行在机器上。

 

     2、托管代码独立于平台和语言,能更好的实现不同语言平台之间的兼容;非托管代码依赖于平台和语言。

 

     3、托管代码可享受CLR提供的服务(如安全检测、垃圾回收等),不需要自己完成这些操作;非托管代码需要自己提供安全检测、垃圾回收等操作。

 

  6.掌握创建.NET应用程序所经历的步骤

     理解C#应用程序代码、程序集、本机代码、EXE文件DLL库、编译、JIT编译器、托管的CLR环境

  7.理解什么是元数据?

    元数据:是一种二进制信息,用以对存储在公共语言运行库可移植可执行文件 (PE) 文件或存储在内存中的程序进行描述。将您的代码编译为 PE 文件         时,便会将元数据插入到该文件的一部分中,而将代码转换为 Microsoft 中间语言 (MSIL) 并将其插入到该文件的另一部分中。在模块或程序集中定义和引         用的每个类型和成员都将在元数据中进行说明。当执行代码时,运行库将元数据加载到内存中,并引用它来发现有关代码的类、成员、继承等信息。

元数据存储一下信息:

  • 程序集的说明
  • 类型的说明
  • 属性

  8.理解什么是中间语言?

  • 垃圾收回机制的原理
  • C#中的数据类型分为值类型 (Value type) 引用类型(reference type)
  •   类 型: 所有的值类型都集成自 System.ValueType 上,除非加声明?否则不可为null,保存在 堆栈(Stack,先进后出)上,常见的值类型有:整形、浮点型、bool、枚举等。
  • 引用类型:所有的引用类型都继承自System.Object 上,引用类型保存在 托管堆(Head,先进先出)上,常见的类型有:字符串数组、字符串、接口、委托、object等。

 

  首先说下C#中的变量类型吧,C#中有2个变量类型,一种是值类型,一种是引用类型,值类型是在栈上创建,这一类型用不到GC,引用类型是在堆中创建,GC主要是在这里管理对象。GC对每个对象有个引用计数,所有说只要有变量在引用它,计数器就不为了,一个变量不再引用这个对象,对象的计数器就减一,知道计数器为0时,对象就成为内存垃圾了(没有变量引用它),但是此时垃圾并没有回收。

  .NETGC机制有这样两个问题:
  首先,GC并不是能释放所有的资源。它不能自动释放非托管资源。
  第二,GC并不是实时性的,这将会造成系统性能上的瓶颈和不确定性。
  GC并不是实时性的,这会造成系统性能上的瓶颈和不确定性。所以有了IDisposable接口,IDisposable接口定义了Dispose方法,这个方法用来供程序  员显式调用以释放非托管资源。使用using语句可以简化资源管理。

 

  • 什么情景会发生垃圾回收机制

  在内存占用超过一定限度时,GC才启动,释放垃圾资源,说白了就是delete这些对象,将内存空间归还给系统。但是这还没完,空间释放后,内存空间就不连续了,所有GC还要干一件事,就是将空间整理下,将占用的空间连续化,具体说就是将空间向上推,就是想高地值转存,这样空间就连续了,使用也方便了,然后GC就改变应用那些对象的变量里地地址,让他们指向正确的位置,所以说C#中的引用类型就是一种指针,一种动态改变值的指针。

 

 

  9.理解CLR、CIL、CTS、CLI、BCL、FCL代表含义

  • CLR 公共语言运行库(Common Language Runtime)
  • CI L 通用中间语言(Common Intermediate Language,简称CIL)
  • CTS 通用类型系统(Common Type System)
  • CL I 公共语言基础架构(Common Language Infrastructure)
  • BCL 基础类库(Base Class Library)
  • FCL 框架类库(Framework Class Library)

 

.NET FRAMEWORK的知识点

标签:变量类型   code   不能   microsoft   电脑   delete   work   compiler   经历   

原文地址:https://www.cnblogs.com/WangBingChao/p/14417973.html


评论


亲,登录后才可以留言!