《CLR.via.C#第三版》第一部分读书笔记(一)
2020-12-13 15:55
标签:style blog http 使用 sp 文件 on 2014 log 最近开始仔细研读《CLR.via.C#第三版》这本书。读pdf文档确实很累。建议有条件的朋友还是买书看吧。 我的笔记用来记录我对这本书的理解,简化下逻辑,对每个部分我觉得是要点的进行归纳总结。特别基础的东西不会做过多的阐述。 第一部分讲的是CLR基础。 首先还是重新说下CLR的概念:“CLR 是一个可由多种编程语言使用的“运行时”。可用任何编程语言来开发代码,只要编译器是面向CLR的就可以了”。这里要重新解释下“只要编译器是面向CLR的就可以了”这句话。初学者一般不认同.net平台跨语言,或者说所谓的“跨语言”是在微软推出的范围内的语言。这个认识其实是错误的。任何语言都可以面向CLR来创建自己的编译器。我们熟知的Iron Ruby、Perl、PHP都有面向CLR的编译器。图1-1展示了编译源代码文件的过程。 比较重要的认知是CLR实际不和托管模块一起工作,而是和程序集一起工作。程序集包含了托管模块和资源文件等其它文件。 IL(中间语言)可以使用汇编语言来写。CLR中的JIT(just in time)也叫即时编译器,里面有个函数JITComplier(),此函数的职责是把要执行的方法的IL转换成本地CPU指令。 类中方法的调用过程: 一个方法执行的时候总的来说会被调用两次。(这里暂定方法名为Test()) 第一次调用: JITCompiler()会把Test()方法的IL代码编译成本地CPU指令(此指令会被保存到一个动态分配的内存块中),Test()方法在内存块中会通过JITComplier执行一遍(包括查找方法的IL,验证方法的IL,编译,执行)。 第二次调用: 完全跳过JITCompiler(),Test()方法在内存中再执行一遍。 两次执行的过程如图1-4,1-5所示: 需要注意的是本地CPU指令是存储到动态内存中的,一旦程序终止,本地CPU指令将会被丢弃。 Debug版本和Release版本的区别本质上是IL代码质量和JIT本地代码质量是否经过优化。从性能上考虑,程序部署、发布,最好是用Release版本。 这个部分还有程序打包、部署、程序集信息等内容。这里就不阐述了。 《CLR.via.C#第三版》第一部分读书笔记(一) 标签:style blog http 使用 sp 文件 on 2014 log 原文地址:http://www.cnblogs.com/hangwei/p/4077573.html