读CLR via C#的观后感(1)

第一次读写写读后感:(如果有错请告知,小弟立马修改)

第一章(1)

执行程序的代码

c# 的代码(托管代码)到cpu指令 需要经过,CLR(公共语言运行库)的检测引用类型,再由JIT编译器找到对应该方法的IL,分配内存块,将IL编译成为CPU指令存入内存块.然后修改对应的条目,能指向这些内存块,跳转到内存块的本机代码.

其中,托管代码和非托管代码的区别:

非托管代码:也叫本地(native)代码.

托管代码:是由公共语言运行库(CLR)执行的代码,而不是由操作系统直接执行。本地代码经过两次编译,第一次将源代码编译成中间代码(MSIL,MicrosoftIntermediate Language),第二次由.net中的CLR将中间代码编译成机器代码。程序实际上是被“托管”在公共语言运行库中。随着程序集的运行,公共语言运行库会持续地提供各种服 务,例如内存管理、安全管理、线程管理等等。和托管资源/非托管资源不同,不要弄混。
————————————————
版权声明:本文中托管代码和非托管代码为CSDN博主「_kangzai」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/z2516305651/article/details/93421861

再加点:托管代码中的进程可以运行多个应用程序,减少进程数,从而增加性能,减少资源,而且健壮性不变.

代码优化

然后JIT如果对同样的方法做过处理,就可以直接跳过,然后直接执行内存块种的代码.

CLR会对JIT的本机代码会进行优化,(Release)会,而(Debug)不会,

IL和验证

IL是基于栈,(先进后出),再编译成为CPU指令的时候,CLR会执行一个验证的过程,确保代码正确(和VSStudio的代码验证是不同的,没有应该,一个是代码的健全性验证,另外个验证方式差不多,但是所在环节不同.这里打个问号?)

验证后的结果是可以放到虚拟内存地址,可以不互相干扰,也可以正确的访问到内存.

不安全的代码

不安全的代码可以直接操作内存地址,并处理这些地址的字节,只有在

  1. 非托管代码进行操作,
  2. 提升效率要求极高的一个算法的性能

(基本上和我绝缘了)

要求添加unsafe关键字,才可以编译,PEVerify.exe可以检测

本地代码生成器:NGen.exe

这个通常是用来再安装到用户计算机上的时候,将IL编译成本机代码.因为是安装编译好了就不用了在编译了,(减少了重复工作)主要作用

  1. 提高应用程序的启动速度
  2. 减少应用程序的工作集 

大概就是它生成一个本机代码,然后CLR加载的时候就直接加载了

但有如下问题:

  • 没有知识产权保护
  • 生成的文件可能失去同步
  • 较差的执行时性能:生成比较差的代码

补充:通常用在客户端.大型客户端可以用MPGO.exe来分析程序执行,从而更好的优化.

Framework类库

额,,,,这个就是调用下dll,好运.

CTS通用类型系统

就是说微软和ECMA有屁眼交易.

  • 字段Field:作为对象状态一部分的数据变量.字段根据名称和类型来区分(思考下:是不是public string Name,类型string,名称Name)
  • 方法Method:针对对象执行操作的函数,通常会改变对象状态.有一个名称,一个签名,一个多个修饰符,签名指定了参数的数量,类型,方法是否有返回值;(public string SetthisName(string Name)
  • 属性Property:对于调用者,属性就像是字段,但对于实现者,属性像是一个方法(get,set)

这里塔逼一句(说句逼话)属性,字段,变量的区别

  • 事件(Event):对于前端的同学比较晓得多就是按钮点击事件

所有类型最终必须从预定义的System.Object类型继承

  • 比较相等性
  • 获取哈希码
  • 查询一个实例的真正类型
  • 执行实力的浅拷贝
  • 获取实例对象当前状态的字符串表示
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值