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. 给出了托管代码与非托管代码三种互操作场景。
相关文章推荐
- CLR Via C# 3rd 阅读摘要 -- Chapter 27 – I/O-Bound Asynchronous Operations
- CLR Via C# 3rd 阅读摘要 -- Chapter 29 – Hybrid Thread Synchronization Constructs
- CLR Via C# 3rd 阅读摘要 -- Chapter 15 - Enumerated Types and Bit Flags
- CLR Via C# 3rd 阅读摘要 -- Chapter 18 - Custom Attributes
- CLR Via C# 3rd 阅读摘要 -- Chapter 11 - Events
- CLR Via C# 3rd 阅读摘要 -- Chapter 16 - Arrays
- CLR Via C# 3rd 阅读摘要 -- Chapter 6 - Type and Member Basics
- CLR Via C# 3rd 阅读摘要 -- Chapter 8 - Methods
- CLR Via C# 3rd 阅读摘要 -- Chapter 20 – Exceptions and State Management
- CLR Via C# 3rd 阅读摘要 -- Chapter 4 - Type Fundamentals
- CLR Via C# 3rd 阅读摘要 -- Chapter 21 – Automatic Memory Management (Garbage Collection)
- CLR Via C# 3rd 阅读摘要 -- Chapter 24 – Runtime Serialization
- CLR Via C# 3rd 阅读摘要 -- Chapter 13 - Interfaces
- CLR Via C# 3rd 阅读摘要 -- Chapter 17 - Delegates
- CLR Via C# 3rd 阅读摘要 -- Chapter 12 - Generics
- CLR Via C# 3rd 阅读摘要 -- Chapter 2 - Building, Packaging, Deploying, and Administering Applications and Types
- CLR Via C# 3rd 阅读摘要 -- Chapter 3 - Shared Assemblies and Strongly Named Assemblies
- CLR Via C# 3rd 阅读摘要 -- Chapter 7 - Constants and Fileds
- CLR Via C# 3rd 阅读摘要 -- Chapter 28 – Primitive Thread Synchronization Constructs
- CLR Via C# 3rd 阅读摘要 -- Chapter 22 – CLR Hosting and AppDomains