您的位置:首页 > 编程语言 > C#

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

2010-03-10 17:07 651 查看

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. 给出了托管代码与非托管代码三种互操作场景。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: