《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版本。
这个部分还有程序打包、部署、程序集信息等内容。这里就不阐述了。
《CLR.via.C#第三版》第一部分读书笔记(一)的更多相关文章
- 《JavaScript面向对象编程指南(第2版)》读书笔记(一)
目录 一.对象 1.1 获取属性值的方式 1.2 获取动态生成的属性的值 二.数组 2.1 检测是否为数组 2.2 增加数组长度导致未赋值的位置为undefined 2.3 用闭包实现简易迭代器 三. ...
- 《JavaScript面向对象编程指南(第2版)》读书笔记(二)
<JavaScript面向对象编程指南(第2版)>读书笔记(一) <JavaScript面向对象编程指南(第2版)>读书笔记(二) 目录 一.基本类型 1.1 字符串 1.2 ...
- 6 Specialzed layers 特殊层 第一部分 读书笔记
6 Specialzed layers 特殊层 第一部分 读书笔记 Specialization is a feature of every complex organization. 专注是 ...
- 《CLR.via.C#第三版》第二部分第8,9章节读书笔记(四)
三种类型的构造方法: 实例构造器(引用类型):实例构造器永远不能被继承(所以方法前没有修饰符):如果类的修饰符为static(sealed和abstract),编译器根本不会在类的定义中生成一个默认构 ...
- 《CLR.via.C#第三版》第二部分第4,5章节读书笔记(二)
这两章全是理论性的东西,我觉得不必过于钻牛角尖.理论这东西,只有在长期的实践中去慢慢领悟才会深刻.下面我只写些我认为重要的关键知识. (一)类型转换 知识点:向基类型的转换被认为是一种安全的隐式转换: ...
- CLR.via.C#第三版 读书笔记
第一章 CLR的执行模型 1.1将源代码编译成托管代码 决定将.NET Framework作为自己的开发平台之后,第一步是决定要生成什么类型的应用程序或组件.假定你已经完成了这些次要的细节:一切都已经 ...
- Java 线程第三版 第一章Thread导论、 第二章Thread的创建与管理读书笔记
第一章 Thread导论 为何要用Thread ? 非堵塞I/O I/O多路技术 轮询(polling) 信号 警告(Alarm)和定时器(Timer) 独立的任务(Ta ...
- Java 螺纹第三版 第一章Thread介绍、 第二章Thread创建和管理学习笔记
第一章 Thread导论 为何要用Thread ? 非堵塞I/O I/O多路技术 轮询(polling) 信号 警告(Alarm)和定时器(Timer) 独立的任务(Ta ...
- python全栈开放实践第三版第一章的练习题完成情况
练习题: 1.简述编译型与解释型语言的区别,且分别列出你知道哪些语言属于编译型,哪些数以解释型.1 编译型:只须编译一次就可以把源代码编译成机器语言,后面的执行无须重新编译,直接使用之前的编译结果就可 ...
随机推荐
- java中用spring实现数组类型输出
java 中的几个数组类型 1.Department类 package com.yy.collection; import java.util.List; import java.util.Map; ...
- 如何去掉div滚动条
1.去掉横向滚动条 style="overflow-x:hidden" 2.去掉纵向滚动条 style="overflow-y:hidden" 3.同时去掉横向 ...
- UITextField使用详解
转iOS中UITextField使用详解 (1) //初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFr ...
- hdu 1015(DFS)
Safecracker Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- JS-offsetParent定位父节点
offsetParent:离当前元素最激动呢一个有定位的父节点 如果没有定位父级,默认是body IE7以下如果当前元素没有定位默认是body,如果有定位就是html IE7以下,如果当前元素的某个父 ...
- HttpURLConnection 文件上传限制
一. 问题 最近在Android程序里上传向.Net服务器上传大文件的时候,发现了一个问题.当上传大文件的时候会爆出OutOfMemoryError,上传小文件则没有这种情况. 二. ...
- 安卓开发:DateUtils
public class DateUtils{ /** * 显示友好时间 * * @param ms * @return */ public static String getTimeDes(long ...
- VS2013 密钥 – 所有版本(Visual Studio Ultimate,Premium,Professional,TFS)
Visual Studio Ultimate 2013 KEY(密钥):BWG7X-J98B3-W34RT-33B3R-JVYW9 Visual Studio Premium 2013 KEY(密钥) ...
- MVC, MVP, MVVM比较以及区别
MVC, MVP和MVVM都是用来解决界面呈现和逻辑代码分离而出现的模式.以前只是对它们有部分的了解,没有深入的研究过,对于一些里面的概念和区别也是一知半解.现在一边查资料,并结合自己的理解,来谈一下 ...
- 修改centos启动项
centos7下修改启动项在路径/etc/grub.d/文件路径下,修改完成之后需要运行命令 grub2-mkconfig --output=/boot/grub2/grub.cfg