当前标签: 极速理解设计模式系列
程兴亮 2011-07-14 09:59 阅读:3115 评论:12
CIL是将.NET代码转化为机器语言的一个中间过程。它是一种介于高级语言和基于Intel的汇编语言的伪汇编语言。当用户编译一个.NET程序时,编译器将源代码翻译成通用中间语言 (CIL),它是一组可以有效地转换为本机代码且独立于CPU的指令。 本系列将从浅到深的分析CIL,通过分析它以优化.NET的运行效率,在实际编码的过程中尽量选择更加优化的编码方式。
摘要: 本节即将新接触的CIL操作符如下: br.s IL_003c 无条件地将控制转移到目标指令(短格式) clt 从计算堆栈的顶部弹出当前值并将其存储到索引 2 处的局部变量列表中 ldloca.s CS$5$0001 将位于特定索引处的局部变量的地址加载到计算堆栈上(短格式) leave.s 退出受保护的代码区域,无条件将控制转移到目标指令(缩写形式) constrained. 约束要对其进行虚方法调用的类型 endfinally 将控制从异常块的 fault 或 finally 子句转移回公共语言结构 (CLI) 异常处理程序阅读全文
摘要: 本节将接触几个新的CIL操作码如下 ldc.i4.0 将整数值 0 作为 int32 推送到计算堆栈上 Ceq 比较两个值。如果这两个值相等,则将整数值 1 (int32) 推送到计算堆栈上;否则,将 0 (int32) 推送到计算堆栈上。 Brtrue.s 如果 value 为 true、非空或非零,则将控制转移到目标指令(短格式)。 Brfalse.S 如果 value 为 false、空引用或零,则将控制转移到目标指令。 Callvirt 对对象调用后期绑定方法,并且将返回值推送到计算堆栈上。 Ldsfld 将静态字段的值推送到计算阅读全文
摘要: 一、在.NET中string是一种特殊的引用类型,它一旦被赋值在堆上的地址即不可改变,之后对其进行的字符串相加等操作之后的结果都指向另外一个堆地址,而非原来的字符串地址。现在我们看以下一段C#代码以观察string在实际编码过程中的使用。二、上面的C#生成的CIL代码如下,三、首先我们看两种字符串的构造方式的不同而引起的效能变化。结论:通过上面两种方式构造方式的CIL我们可以很清晰的看出第二种方式的效率要高于第一种的字符串构造方式。所以我们在实际的编码过程中可以考虑尽量使用第二种编码方式。四、大家都知道装箱操作会在堆上寻找一个控件来存储值类型的值。会耗费大量的时间。所以下面我们来看两个实例代码阅读全文
摘要: 一、在.NET中,内存分配是非常重要的一大块,为了更深入的了解其分配情况,本节中我们将利用一个实例来查看其CIL语言分析内存的分配情况。下面我们首先来看实例C#源码如,二、接下来我们看这段程序的CIL代码,通过这段代码我们大概能够猜出分别代表了什么意思。 首先我们看第一段CIL代码所示,声明了程序的进入点,以及定义了5个局部的变量其索引值分别为0,1,2,3,4,变量名为a,b,c,d,e。其次我们来看第二段CIL代码,这是值类型的直接存储在栈中的数据,直接取出相加即可。阅读全文
摘要: 一、CIL的基本构成 CIL由CIL指令(directive)、CIL特性(attribute)、CIL操作码(opcode)组成。CIL指令是用于描述.NET程序集总体结构的标记,并且通知CIL编译器如何定义在程序集中用到的命名空间、类、成员的。它以(.)一个点号开头,例如:.namespace、.class、.property、.method等构成。CIL特性是由于CIL指令并不能完全说明.NET成员和类的情况下,针对CIL指令进行补充说明成员或者类的特性的。比如一个类可能是公共的,集成的。它就需要用public特性、extends特性或者implements特性对类的.class指令进行修饰的补充说明。阅读全文
摘要: CIL简介:CIL(Common Intermediate Language)中文名为通用中间语言,注意它曾经被称为微软中间语言或MSIL,它是一种类似于JAVA字节码的语言。在微软语言平台中,不管程序员使用C#、VB.NET或者J#等语言编写的程序进行编译的时候,编译器将这几种语言编写的源代码编译为CIL(微软中间语言)语言,此时再通过JIL(Just In Time实时编译器)编译为针对各种不同CPU的指令(注意因为是实时的编译器,所以它运行的时候是只运行需要编译的CIL语言段,而不是全部一下编译完,这是为了提高效率。)阅读全文
.Net Remoting
webService
webService