.NET Framework和CLR (总结自MSDN)

链接: 

  .NET Framework Conceptual Overview :  http://msdn.microsoft.com/en-us/library/zw4w595w.aspx

  Common Language Runtime (CLR):http://msdn.microsoft.com/en-us/library/8bs2ecf4.aspx

 

  .NET Framework 是一个集成在 Windows 中的组件,它支持生成和运行下一代应用程序与 XML Web Services。

  •     .NET Framework 具有两个主要组件:公共语言运行时(Common Language Runtime)和 .NET Framework 类库公共语言运行时是 .NET Framework 的基础。您可以将运行时看作一个在执行时管理代码的代理,它提供内存管理、线程管理和远程处理等核心服务,并且还强制实施严格的类型安全以及可提高安全性和可靠性的其他形式的代码准确性。事实上,代码管理的概念是运行时的基本原则以运行时为目标的代码称为托管代码,而不以运行时为目标的代码称为非托管代码.NET Framework 的另一个主要组件是类库,它是一个综合性的面向对象的可重用类型集合,您可以使用它开发多种应用程序,这些应用程序包括传统的命令行或图形用户界面 (GUI) 应用程序,也包括基于 ASP.NET 所提供的最新创新的应用程序(如 Web 窗体和 XML Web Services)。
  •  .NET Framework 可由非托管组件承载,这些组件将公共语言运行时加载到它们的进程中并启动托管代码的执行,从而创建一个可以同时利用托管和非托管功能的软件环境。.NET Framework 不但提供若干个运行时宿主,而且还支持第三方运行时宿主的开发。例如,ASP.NET 承载运行时以为托管代码提供可伸缩的服务器端环境。ASP.NET 直接使用运行时以启用 ASP.NET 应用程序和 XML Web Services

 .NET Framework 环境

下面的插图显示公共语言运行时和类库与应用程序之间以及与整个系统之间的关系。该插图还显示托管代码如何在更大的结构内运行。

  

 

 

公共语言运行时(CLR)的功能

       公共语言运行时管理内存、线程执行、代码执行、代码安全验证、编译以及其他系统服务。这些功能是在公共语言运行时上运行的托管代码所固有的

  •  至于安全性,取决于包括托管组件的来源(如 Internet、企业网络或本地计算机)在内的一些因素,托管组件被赋予不同程度的信任
  •  运行时强制实施代码访问安全例如,用户可以相信嵌入在网页中的可执行文件能够在屏幕上播放动画或唱歌,但不能访问他们的个人数据、文件系统或网络。这样,运行时的安全性功能就使通过 Internet 部署的合法软件能够具有特别丰富的功能。
  •  运行时还通过实现称为常规类型系统 (CTS) 的严格类型验证和代码验证基础结构来加强代码可靠性。CTS 确保所有托管代码都是可以自我描述的。各种 Microsoft 编译器和第三方语言编译器都可生成符合 CTS 的托管代码。这意味着托管代码可在严格实施类型保真和类型安全的同时使用其他托管类型和实例。
  •  此外,运行时的托管环境还消除了许多常见的软件问题。例如,运行时自动处理对象布局并管理对对象的引用,在不再使用它们时将它们释放。这种自动内存管理解决了两个最常见的应用程序错误:内存泄漏和无效内存引用
  •   运行时还提高了开发人员的工作效率例如,程序员可以用他们选择的开发语言编写应用程序,却仍能充分利用其他开发人员用其他语言编写的运行时、类库和组件任何选择以运行时为目标的编译器供应商都可以这样做。以 .NET Framework 为目标的语言编译器使得用该语言编写的现有代码可以使用 .NET Framework 的功能,这大大减轻了现有应用程序的迁移过程的工作负担。
  •   尽管运行时是为未来的软件设计的,但是它也支持现在和以前的软件。托管和非托管代码之间的互操作性使开发人员能够继续使用所需的 COM 组件和 DLL。
  • 运行时旨在增强性能。尽管公共语言运行时提供许多标准运行时服务,但是它从不解释托管代码一种称为实时 (JIT) 编译的功能使所有托管代码能够以它在其上执行的系统的本机语言运行。同时,内存管理器排除了出现零碎内存的可能性,并增大了内存引用区域以进一步提高性能。
  • 最后,运行时可由高性能的服务器端应用程序(如 Microsoft® SQL Server™ 和 Internet 信息服务 (IIS))承载此基础结构使您在享受支持运行时承载的行业最佳企业服务器的优越性能的同时,能够使用托管代码编写业务逻辑。

公共语言运行时(CLR)细节

  •  若要使公共语言运行时能够向托管代码提供服务,语言编译器必须生成一些元数据来描述代码中的类型、成员和引用。元数据与代码一起存储;每个可加载的公共语言运行时可迁移执行 (PE) 文件都包含元数据。公共语言运行时使用元数据来完成以下任务:查找和加载类,在内存中安排实例,解析方法调用,生成本机代码,强制安全性,以及设置运行时上下文边界。
  •  公共语言运行时自动处理对象布局并管理对象引用当不再使用对象时释放它们按这种方式实现生存期管理的对象称为托管数据垃圾回收消除了内存泄漏以及其他一些常见的编程错误。如果您编写的代码是托管代码,则可以在 .NET Framework 应用程序中使用托管数据、非托管数据或者同时使用这两种数据。由于语言编译器会提供自己的类型(如基元类型),因此您可能并不总是知道(或需要知道)这些数据是否是托管的。
  •  有了公共语言运行时,就可以很容易地设计出对象能够跨语言交互的组件和应用程序也就是说,用不同语言编写的对象可以互相通信,并且它们的行为可以紧密集成。例如,可以定义一个类,然后使用不同的语言从原始类派生出另一个类或调用原始类的方法。还可以将一个类的实例传递到用不同的语言编写的另一个类的方法。这种跨语言集成之所以成为可能,是因为基于公共语言运行时的语言编译器和工具使用由公共语言运行时定义的常规类型系统(CTS),而且它们遵循公共语言运行时关于定义新类型以及创建、使用、保持和绑定到类型的规则。
  •  所有托管组件都带有生成它们所基于的组件和资源的信息这些信息构成了元数据的一部分公共语言运行时使用这些信息确保组件或应用程序具有它需要的所有内容的指定版本,这样就使代码不太可能由于某些未满足的依赖项而发生中断。注册信息和状态数据不再保存在注册表中(因为在注册表中建立和维护这些信息很困难)。取而代之的是,有关您定义的类型(及其依赖项)的信息作为元数据与代码存储在一起,这样大大降低了组件复制和移除任务的复杂性。
  • 语言编译器和工具公开公共语言运行时的功能的方式对于开发人员来说不仅很有用,而且很直观。这意味着,公共语言运行时的某些功能可能在一个环境中比在另一个环境中更突出。您对公共语言运行时的体验取决于所使用的语言编译器或工具。例如,如果您是一位 Visual Basic 开发人员,您可能会注意到:有了公共语言运行时,Visual Basic 语言的面向对象的功能比以前多了。

.NET Framework 类库

  • .NET Framework 类库是一个与公共语言运行时紧密集成的可重用的类型集合。该类库是面向对象的,并提供您自己的托管代码可从中导出功能的类型。这不但使 .NET Framework 类型易于使用,而且还减少了学习 .NET Framework 的新功能所需要的时间。此外,第三方组件可与 .NET Framework 中的类无缝集成。

 

posted on 2010-09-15 11:24  I过T  阅读(1694)  评论(0编辑  收藏  举报

导航