CLR Via C# 3rd 阅读摘要 -- Chapter 1 - The CLR's Execution Model

 Compiling Source Code Into Managed Modules

  1.托管模块的组成:

  • PE32 / PE32+ Header
  • CLR Header
  • Metadata
  • IL Code 

 2.元数据的用途:

  •  编译时不再需要头文件和类型库;
  • 为IDE提供智能感知(IntelliSense)特性;
  • 让CLR验证并执行哪些是“类型安全”(type-safe)的操作;
  • 序列化-反序列化;
  • 让GC跟踪对象的生存期 。

 3.MS C++编译器构建EXE/DLL时默认在运行时允许非托管(unmanaged)代码, /CLR开关-->托管代码 。C++唯一可以在一个模块中包含托管和非托管代码。

 Combining Managed Modules Into Assemblies

 

 1. 实际上,CLR直接打交道的是程序集,而不是模块;
 2. 程序集Assembly,是一个或多个模块或资源文件的逻辑组合(即程序集由多个模块和资源文件组成);
 3. 程序集是复用、安全、版本的最小单元

 Loading The Common Language Runtime

 1.MSCorEE.DLL,CLR的加载过程 ;

 2. CLRVer.exe,查看本机可用的CLR版本,以及某个进程使用的CLR版本;

 3./platform开关的效果

  

 Executing Your Assembly's Code

  1. ILASM.exe,ILDASM.exe;

  2. CLR's JIT;如果同时运行应用程序的多个实例(在不同的进程中),JIT Compiler必须再次编译IL到本地CPU指令; 

  3. /optimize/debug开关 ,没有优化的IL代码包含NOP指令,因此可以在调试时“编辑-运行”(edit-and-continue);

  4.为什么托管代码比非托管代码还要快?

  • JIT Compiler 可以将IL编译成本地指令时充分采用CPU的高级指令,而非托管代码在编译时通常采用符合CPU最低门槛的指令;
  • JIT Compiler 可以略过那些判断条件永为False的分支;
  • 二次编译,重新组织并去掉错误的条件分支(将来支持)。 

  5.IL与验证

  • IL是基于栈的,在编译IL到本地指令的过程中,CLR会有一个验证(Verification)的过程。验证什么?代码是否安全。 

  6.不安全代码 

  • /unsafe开关;
  • PEVerify.exe;
  • 混淆与防盗版措施。

 The Native Code Generator Tool: NGen.exe

 1. NGen.exe的两个应用场景

  • 改进应用程序的启动时间;
  • 消减应用程序的工作集。 

  2. NGen之后需要注意的方面

  •  并不能保护智力资产;
  • 并不是一劳永逸,很容易失效。必须匹配的项(CLR,CPU,OS,MVID,依赖库的VID,安全);
  • 低效的执行效率,降低≈5%。 

 The Framework Class Library

 1.可干的事情

  • Web服务
  • Web站点(Webform)
  • GUI程序(WinForm,WPF)
  • RIAs (SilverLight)
  • 控制台程序 
  • Windows服务
  • 数据库存储过程
  • 组件库 

 The Common Type System

 1.CTS,CLI(ECMA-335),C#(ECMA-334)

 2.CTS基本成员

  • Field
  • Method
  • Property
  • Event 

 3.成员访问修饰符 

  • Private (private)
  • Family (protected)
  • Family and Assembly (C#、VB.NET不支持)
  • Assembly (internal)
  • Family or Assembly (protected internal)
  • Public (public) 

 4.System.Object有什么

  • 比较两个对象实例是否相等
  • 获得对象实例的散列值
  • 查询对象实例的真实类型
  • 对象实例的bitwise语义的拷贝行为
  • 对象实例当前的表述信息 

 The Common Language Specification

 1. CLS-compliant [assembly: CLSCompliant(true)]

 

 Interoperability With Unmanaged Code

 1. CLR支持的3种互操作场景

  • 托管代码可以调用DLL中的非托管代码(P/Invoke)
  • 托管代码可以使用现有的COM组件(Server),TlbImp.exe
  • 非托管代码可以使用托管类型(Server),TlbExp.exe,RegAsm.exe

http://CLRInterop.CodePlex.com/ 

 本章小结

  本章主要介绍了CLR,托管代码,程序集,IL,Unsafe Code,CTS,FCL,CLS的一些基本概念。

1. 讲述了如何将各种语言的代码编译成托管模块,然后组装成程序集,CLR如何加载并执行这些程序集中的代码;

2. 介绍了NGen的用途和局限性,分析了为什么托管代码有可能比本地代码执行起来效率的可能原因;

3. 解释了CTS/CLR、编程语言(C#、VB、……)、CLS之间的关系;

4. 给出了托管代码与非托管代码三种互操作场景。 

posted @ 2010-03-10 17:07  bengxia  阅读(521)  评论(2编辑  收藏  举报
无觅相关文章插件,快速提升流量