托管代码与非托管代码的互操作性 CLR支持三种互操作的情形: 1.托管代码能够调用DLL中的非托管代码 2.托管代码可

时间:2021-08-03 08:10:03

CLR:是一个可由多种编程语言使用的“运行时”。

CLR的核心成果(好比 内存打点、措施集加载、安适性、异常措置惩罚惩罚、线程同步)可由面向CLR的所有语言使用。

CLR是完全围绕类型展开的。

面向CLR的语言编译器:

Microsoft:C++/CLI、C#、Visual Basic、F#、Iron Python 以及IL汇编器。

其他公司、学院:Ada、PAL、Caml、COBOL、LOGO、PHP...

托管模块的构成部分:PE32/PE32+头、CLR头、元数据、IL代码。

IL基于栈的。

IL指令时“无类型”(typeless)的

IL供给的优势:应用措施的健壮性和安适性,对底层CPU的抽象。

将IL编译成本地CPU指令时,CLR会执行一个名为验证的过程。(查抄高级IL代码,确定代码所做的一切都是安适的。)

在托管模块的元素中,包罗了要由验证过程使用的所有要领和类型信息。

在Windows中,每个进程都有它本身的虚拟地点空间。(保证措施的健壮性,不变性;一个进程无法滋扰另一个进程)

托管代码相较于非托管代码的优势:在一个操纵系统进程中运行多个应用措施,可减少进程数,从而增强性能(windows进程需要使用大量操纵系统资源)。

不安适代码 使用场景:直接操纵内存地点的代码称为不安适代码,并可操纵这些地点处的字节。凡是只有在与非托管代码进行互操纵,或者在提升对效率要求极高的一个算法的性能的时候,才需要这样做。

不安适代码 危害:可能粉碎数据布局,风险安适行性,甚至可能造成新的安适缝隙。

C#编译器要求包罗不安适代码的所有发现合法都用unsafe关键字符号,要求使用/unsafe编译器开关来编译源码。

本地代码生成器:NGen.exe

1.感化:

加快应用措施的启动速度。

减小应用措施的事情集。

2.NGen生成的文件存在的问题:

没有常识产权掩护。

NGen出产的文件可能掉去同步。

较差的执行时性能。

正是因为存在上述这些问题,所以在考虑shiyNGen.exe时,务必非常谨慎。对付处事器真个应用措施,NGen.exe的感化并不明显,甚至毫无用处,这是因为只有第一个客户端请求才会感应熏染到性能的下降,后续的所有客户端请求都能以全速运行。别的,对付大大都处事器应用措施,由于只需要代码的一个实例,所以无法从事情集的缩小中获得任何好处。还需要注意,NGen.exe2.0之前生成的映像不能在不提部分的AppDomain之间共享。因此,如果一个措施集要在跨AppDomain的环境中使用(好比ASP.NET),用NGen来生成它是没有任何好处的。(不过,这一限制在NGen2.0之后已经不存在了。)

对付客户真个应用措施,也许能用NGen.exe加快启动速度,或者缩小工具集(如果措施集同时由多个应用措施使用)。即使一个措施集不是由多个应用措施使用,用NGen来生成它,也有助于增强事情集。别的,假如用NGen.exe来生成一个客户端应用措施的所有措施集,CLR根柢不需要加在JIT编译器,从而进一步缩小事情集,固然,只要有一个措施集不是用NGen生成的,或者措施集的一个由NGen声生成的文件无法使用,,那么还是会加载JIT编译器,应用措施的事情集将随之增大。

Framework类库

.NET Framework 中包罗了Framework类库(Framework Class Library)。FCL是一组DLL措施集的统称,此中含有数千个类型界说,每个类型都果然了一些成果。

下面列举了应用措施开发人员可以操作这些措施集创建的一部分应用措施:

Web Service

Web Form

Windows应用措施

RIA

Windows控制台应用措施

Windows处事

数据库存储过程

组件库

所有的应用措施都要使用来自System定名空间的类型。

部分通例的FCL定名空间 定名空间   内容说明  
System   包罗每个应用措施都要用到的所有根基类型  
System.Data   包罗用于和数据库通信以及措置惩罚惩罚数据的类型  
System.IO   包罗用语执行流I/O以及浏览目录/文件的类型  
System.Net   包罗进行初级网络通信,并与一些常用Internet协议协作的类型  
System.Runtime.InteropService   包罗允许托管代码访谒非托管操纵系统平台成果(好比COM组件以及Win32或定制DLL中的函数)的类型  
System.Security   包罗用语掩护数据和资源的类型  
System.Text   包罗措置惩罚惩罚各类编码方法(好比ASCII和Unicode)的文本的类型  
System.Threading   包罗用于异步操纵和同步资源访谒的类型  
System.Xml   包罗用于措置惩罚惩罚XML架构(XML Schema)和数据的类型  

通用类型系统CTS

CLR是完全围绕类型展开的。CTS描述了类型的界说和行为。

CTS法则:

1.CTS规范规定一个类型可以包罗零个或者多个成员。(成员包孕:字段、要领、属性、事件)

2.CTS指定了类型可视性法则以及类型成员的访谒法则。(private、protected、internal、public...)

3.CTS为类型担任、虚要领、东西保留期等界说了相应法则。

4.所有的类型最终必需从预订一的System.Object类型担任。

System.Object类型允许做的工作:

1)对照两个实例的相等性。

2)获取实例的哈希码。

3)盘问一个实例的真正类型。

4)执行实例的浅(按位)拷贝。

5)获取实例东西确当前状态的一个字符串暗示。

大众语言规范CLS