《CLR.via.C#第三版》第一部分读书笔记(一)
最近开始仔细研读《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版本。
这个部分还有程序打包、部署、程序集信息等内容。这里就不阐述了。
最新文章
- TP5.0源生Excel导出
- Gradle多渠道打包
- CCSprite setTextureRect 的坐标的坑
- Junit测试中的setup和teardown 和 @before 和 @After 方法
- Opengl的gl_NormalMatrix【转】
- fibonacci数列从a到b的个数
- codeforces A. K-Periodic Array 解题报告
- C#实现根据IP 查找真实地址
- PHP内置的字符串处理函数
- (转)Engineering Productivity
- RAC 之 RMAN 恢复
- 数据连接命令join
- php Magic methods __call
- .net System.TypeInitializationException 类型初始值设定项引发异常
- 服务器端操作Cookie[2]
- Unix/Linux环境C编程入门教程(36) 初识shell
- Java开发笔记(四十九)关键字super的用法
- Web开发(调试方法 F12)
- html中头meta信息
- (html4与html5分别实现)用一个表单向php界面提交不同的命令