最近开始仔细研读《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版本。

这个部分还有程序打包、部署、程序集信息等内容。这里就不阐述了。

最新文章

  1. TP5.0源生Excel导出
  2. Gradle多渠道打包
  3. CCSprite setTextureRect 的坐标的坑
  4. Junit测试中的setup和teardown 和 @before 和 @After 方法
  5. Opengl的gl_NormalMatrix【转】
  6. fibonacci数列从a到b的个数
  7. codeforces A. K-Periodic Array 解题报告
  8. C#实现根据IP 查找真实地址
  9. PHP内置的字符串处理函数
  10. (转)Engineering Productivity
  11. RAC 之 RMAN 恢复
  12. 数据连接命令join
  13. php Magic methods __call
  14. .net System.TypeInitializationException 类型初始值设定项引发异常
  15. 服务器端操作Cookie[2]
  16. Unix/Linux环境C编程入门教程(36) 初识shell
  17. Java开发笔记(四十九)关键字super的用法
  18. Web开发(调试方法 F12)
  19. html中头meta信息
  20. (html4与html5分别实现)用一个表单向php界面提交不同的命令

热门文章

  1. Apizza可以进行本地调试,也可以进行跨域调试,但是需要chrome插件
  2. OSG配置问题
  3. 完美解决全面屏蔽Google教程(终结者)
  4. 简单jquery实现select三级联动
  5. lua 位运算
  6. Linux图片批处理
  7. out与ref的区别
  8. 为什么匿名内部类只能访问final变量【转】
  9. ServiceMix in daemon mode
  10. Cassandra对读写请求的处理机制