CLR via C# 读书笔记1-4

CLR via C# 第4版.pdf 完整书签版 立即下载

运行程序集代码

托管程序集由 metadata 和 IL 组成,IL 是一种不依赖 CPU 的机器语言,相对大多数的 CPU 机器语言来说,它属于高级语言。它可以建立/初始化对象,调用虚拟方法,直接操作数组,甚至进行错误捕获等,你可以把它看作一种面向对象的机器语言。
IL 与其他机器语言一样可以被写成程序集语言 (assembly language),Microsoft 提供了两个工具 ILAsm.exe,ILDasm.exe。
需要记住的是所有高级语言只提供了 CLR 机能的一个子集,而 IL 程序集语言能提供所有 CLR 的机能。所以如果你选择的语言缺失部分 CLR 的机能(而这部分机能又是你需要的)情况下,你可以使用IL 程序集语言或者其他支持该 CLR 的机能语言。
运行一个方法的时候, IL 必须先转换成本地 CPU 指令,这是由 CLR 的 JIT (just-in-time) 编译器完成的。图1-4 显示了首次调用一个方法的情形。
在 Main 方法调用前, CLR 检测出所有被主代码参照的类型,并为这些类型分配一块内部数据结构,以此管理对这些类型的调用。在图 1-4 中 Main 方法参照了一个类型: Console,相应的 CLR 分配了一个内部数据结构。 这个内部数据结构包含了Console 类型所有方法的入口列表,每个入口条目都记录了相应方法的实现地址。当初始化这个结构时, CLR 设定每个入口条目到一个 CLR 自身内部的未归档的方法(这个方法可称之为 JITCompiler)。当 Main 函数首次调用 WriteLine,JITCompiler 介入负责把这个方法的 IL 代码转换为本地 CPU 指令。

一经调用,JITCompiler 就把这些信息记录在案(前文提到的由CLR 建立的内部数据结构中),再次调用时就可以直接返回编译过的实现代码地址。
如图 1-5 显示了再次调用 WriteLine 的情形:

这就是首次调用较慢,后续调用快的由来(后续调用不需要JITCompiler再次解析)。由于 JIT 编译器把生成的本地 CPU 指令存在内存中,所以程序终止后这些信息会被销毁。所以当一个程序在关闭后再次执行,JIT 编译器又需要再次解析每个被调用的方法。
另外你需要知道 CLR 的 JIT 编译器可以像非托管的C++编译器一样优化本地代码,优化后的代码具有更好的运行效率,当然优化本身会花费一些时间。
C# 编译器有两个编译开关: /optimize 和 /debug,下表列出了这些开关对生成 IL 代码的影响,以及对JIT compiler 生成本地代码的质量。

编译开关设定C# IL 代码质量JIT 本地代码质量
/optimize- /debug-
(默认值)
未优化优化
/optimize- /debug(+/full/pdbonly)未优化未优化
/optimize+ /debug(-/+/full/pdbonly)优化优化


使用 /optimize-,未优化的 IL 包含了许多空(NOP) 以及跳转到下一行代码的分支,这些用来帮助 Visual Studio 在调试时支持 edit-and-continue 机能;而如果生成的是优化后的 IL 代码,将无法实现单步调试等机能,当然这时的 IL 代码更小更容易被人读懂。

另外仅当你 使用了/debug(+/full/pdbonly) 开关的时候,Program Database (PDB) 文件才会被生成。这个文件被用来帮助调试器找到本地变量并在 IL 指令与原代码建立映射。/debug:full 会让 JIT 编译器追踪每条由IL指令转换而来的本地代码,它让你可以使用 just-in-time 调试器来连接到一个已经运行的进程上。如果没有指定 /debug:full 开关不会去追踪并因此效率会高一些,占用的内存也少一些。当你使用Visual Studio调试器启动一个进程的时候,它将强制 JIT 编译器启动追踪 (无视 /debug 开关设定),除非你在Visual Studio中关闭Suppress JIT Optimization On Module Load (Managed Only) 选项。
托管程序的源代码需要编译,执行时又需要的解析,这导致许多有 C/C++ 背景的人怀疑其效率。实际上运行效率确实会受到影响,但这影响远比想象的要小,而且有时托管代码甚至能跑赢非托管程序。这有多方面的原因,比如:JIT 编译器实时解析 IL 代码,它能够获知更多运行时的系统情况。以下是托管代码胜过非托管程序的场景:
■ JIT 编译器可以判断应用程序是否运行在 Intel Pentium 4 CPU 上并利用 Pentium 4 集成的特殊指令。而非托管程序以最低/最通用的 CPU 为目标环境来编译,无法应用到这些特殊指令。

■ JIT 编译器能检测出哪些判断总是假的,比如以下判断:
if (numberOfCPUs > 1) {
...
}
这段代码在一台仅有1个CPU的机器上运行,经过 JIT 编译器处理后不生成任何 CPU 指令。
■ 程序运行时,CLR 能对代码的执行进行性能分析,并重新编译 IL 为本地代码。重新编译将根据已知的执行效率减少不正确的分支。当前版本的 CLR 尚未支持此功能,但今后可能会。
如果你遇到执行效率低下的情况,你可以使用.NET Framework SDK 中的 NGen.exe 工具。这个工具把一个程序集的所有 IL 代码编译为本地代码并存到一个文件中。运行程序,当程序集载入时 CLR 自动检查该程序集是否存在已编译的版本,如果存在 CLR 载入这些已编译代码(即:略过了实时编译)。需要注意的是 NGen.exe 必须对实际运行环境采用较保守的策略,换句话说它无法像JIT 编译器那样生成高优化率的代码。
另外你可以采用 System.Runtime.ProfileOptimization 类,在程序运行的时候来记录哪些方法被 JIT 编译了。下次再次启动你的程序时 JIT 编译器会在另外一个线程上同时编译这些方法(前提是你跑在多核CPU的机器上),从而使你的程序跑得更快。

CLR via C# 第4版 英文PDF CLR via C# 第4版 英文PDFKristin, words cannot express how /feel about our life together. cherish our family and all our adventures. I'm filled each day with love for Aidan (age 9)and Grant (age 5), you both have been an inspira- tion to me and have taught me to play and have fun Watching the two of you grow up has been so rewarding and enjoyable for me. am lucky to be able to partake in your lives. love and ap preciate you more than you could ever know Contents at a glance Introduction PART I CLR BASICS CHAPTER 1 The clr's execution model CHAPTER 2 Building, Packaging, Deploying, and Administering Applications and Types 33 chaPTeR 3 Shared Assemblies and Strongly Named Assemblies 65 PART I DESIGNING TYPES CHAPTER 4 Type Fundamentals 91 CHAPTER 5 Primitive, Reference, and Value Types 111 CHAPTER 6 Type and Member Basics 151 CHAPTER 7 Constants and fields 175 chaPTer 8 Methods 181 chaPTer 9 Parameters 209 CHAPTER 10 Properties 227 CHAPTER 11 Events 249 CHAPTER 12 Generics 265 CHAPTER 13 Interfaces 295 PARTⅢ ESSENTIAL TYPES CHAPTER 14 Chars, Strings, and Working with Text 317 CHAPTER 15 Enumerated Types and Bit Flags 361 CHAPTER 16 Arrays 373 CHAPTER 17 Delegates 391 CHAPTER 18 Custom Attributes 421 CHAPTER 19 Nullable value Types 441 PART IV CORE FACILITIES CHAPTER 20 Exceptions and state management 451 CHAPTER 21 The Managed Heap and Garbage Collection 505 CHAPTER 22 CLR Hosting and AppDomains 553 CHAPTER 23 Assembly Loading and reflection 583 CHAPTER 24 Runtime serialization 611 CHAPTER 25 Interoperating with WinRT Components 643 PAR V THREADING ChaPTEr 26 Thread basics 669 CHAPTER 27 Compute-Bound Asynchronous Operations 691 CHAPTER 28 IyO-Bound Asynchronous Operations 727 CHAPTER 29 Primitive thread Synchronization Constructs 757 CHAPTER 30 Hybrid Thread Synchronization Constructs 789 Index 823 Contents at a glance Contents Introduction XX PART CLR BASICS Chapter 1 The Clrs Execution Model 3 Compiling Source Code into Managed Modules Combining managed modules into assemblies Loading the Common Language Runtime 8 Executing Your Assembly's Code 11 IL and∨ erification 16 Unsafe Code The Native Code generator tool: ngen. exe 19 The Framework Class Library 22 The Common Type System The Common Language Specification Interoperability with Unmanaged Code 30 Chapter 2 Building, Packaging, Deploying, and Administering Applications and Types 33 NET Framework Deployment Goals 34 Building Types into a Module 35 Response Fil 36 A Brief Look at metadata 38 What do you think of this book We want to hear from you Microsoft is interested in hearing your feedback so we can continually improve our books and learning resources for you. To participate in a brief online survey, please visit microsoft. com/learning/booksurvey Combining Modules to Form an Assembly 45 Adding Assemblies to a Project by Using the Visual Studio IDE.51 Using the assembly Linker Adding Resource Files to an Assembly 53 Assembly Version Resource Information .54 Version numbers ..58 Culture Simple Application Deployment(Privately deployed Assemblies)...60 Simple Administrative Control(Configuration) 62 Chapter 3 Shared Assemblies and Strongly Named Assemblies 65 Two Kinds of Assemblies, Two Kinds of Deployment 66 Giving an Assembly a Strong Name 67 The global Assembly Cache 72 Building an Assembly That References a Strongly Named Assembly..74 Strongly named assemblies are tamper-Resistant 75 Delayed Signing Privately Deploying Strongly Named Assemblies How the Runtime Resolves Type References 80 Advanced Administrative Control( Configuration) 83 Publisher Policy control 86 PART I DESIGNING TYPES Chapter 4 Type Fundamentals 91 All Types Are Derived from System Object .91 Casting Between Types 93 Casting with the C# is and as Operators Namespaces and assemblies 97 How Things relate at Run time .101 Chapter 5 Primitive, Reference, and Value Types 111 Programming Language Primitive Types 111 Checked and Unchecked Primitive Type Operations 115 Reference Types and value Types 118 Boxing and Unboxing Value Types 124 Changing Fields in a Boxed Value Type by Using Interfaces and Why You Shouldnt Do This) 136 Object Equality and Identity 139 Object hash Codes .142 The dynamic Primitive Type ......144 Chapter 6 Type and member Basics 151 The Different Kinds of Type Members .151 Type visibilit 154 Friend assemblies 154 Member accessibility .156 Static Classes ...158 Partial Classes, Structures, and Interfaces .159 Components, Polymorphism, and Versioning 160 How the CLR Calls Virtual Methods, Properties, and Events 162 Using Type Visibility and Member Accessibility Intelligently...166 Dealing with Virtual Methods When Versioning Types 16 Chapter 7 Constants and Fields 175 Constants 175 Fⅰe|ds ...177 Chapter 8 Methods 181 Instance Constructors and Classes(Reference Types) 181 Instance Constructors and Structures(Value Types) 184 Type Constructors 187 Contents x Operator Overload Methods 191 Operators and Programming Language Interoperability 193 Conversion Operator Methods 195 Extension method 198 Rules and guidelines ....,200 Extending Various Types with Extension Methods 201 The Extension Attribute 203 Partial Methods 204 Rules and guidelines 207 Chapter 9 Parameters 209 Optional and Named Parameters 209 Rules and guidelines 210 The defaultParameter value and optional Attributes 212 Implicitly Typed Local Variabl 212 Passing parameters by reference to a Method 214 Passing a variable Number of arguments to a Method 220 Parameter and Return Type Guidelines 223 Const-nes 224 Chapter 10 Properties 227 Parameterless Properties 227 Automatically Implemented Properties 231 Defining Properties Intelligently 232 Object and collection Initializers 235 Anonymous Type .237 The System. Tuple type 240 Parameterful Properties 242 The performance of calling property accessor Methods 247 Property Accessor Accessibility 248 Generic prop A roperty Access 248 立即下载

相关推荐

CLR via C# 第4版(中英文版)

CLR via C# 第4版内含中文版以及英文版两种不同语言的PDF,高清无水印。

CLR via C 第4版 PDF资源介绍

CLR via C# 第4版 PDF资源介绍 【下载地址】CLRviaC第4版PDF资源介绍 《CLR via C#》第4版PDF资源为您提供了深入.NET平台底层架构和C#语言高级特性的详尽指南。本书共计700多页,涵盖CLR核心概念,如内存管理、异常处理、垃圾回收机制、类型系统及程序集加载与执行等。通过学习,您将更深...

gitblog_06727的博客 569

.NET CLR via C#(第4版) 最新完整版 高清文字版

是第4版 正式版 不是prepress版。 本书是全球享有盛誉的技术作家Jeffrey Richter的经典书籍CLR via C#最新版第四版。 本书针对clr、C#5.0和.net framework 4.5进行深入、全面的探讨,并结合实例介绍了如何利用它们进行设计、开发和调试。 本书深入、全面探讨.NET Framework、CRL和多核编程,广泛讨论FrameworkClassLibrary(FCL)核心类型,对泛型和线程处理等深奥 难懂的开发概念提供权威、实用的指导。

NET CLR via C#(中文第4版)-完整版-5

CLR via C# (中文第4版) 完整版-第四卷,共5卷,请在点击上传作者账户资源进行完整下载(csdn最大只能传70MB的文件)

CLR Via C# 读书笔记

这是国外一位程序员写的CLR Via C#读书笔记,写得挺好,拿出来跟大家分享

CLR C via 第四版PDF 中文完整版

CLR C# via 第四版PDF 中文完整版 【下载地址】CLRCvia第四版PDF中文完整版 这是一份CLR C# 第四版的中文翻译完整PDF文档,深入解析C#语言的底层运行机制与CLR(公共语言运行时)的核心知识。文档经过精心翻译,内容全面且易于理解,特别适合国内开发者学习。为了方便查阅,我们为文档添加了详细的目录...

gitblog_06717的博客 632

跟着团子学SAP CO:熟练使用结果分析码实现各个场景下收入成本的匹配(一) KKA2/CJ88

PS模块中对财务顾问最难的点在于项目结算,特别是销售型的项目结算。针对客户型项目结算我列举了以下常见的收入成本匹配的一些场景: (1)在项目执行过程中会多次开票,但由于各期成本浮动很大(如前期可能只涉及一些人工、中期全是比较金额较大的材料费),所以希望开票的时候能通过合理的一些指标进行主营业务成本与主营业务收入的匹配。 (2)项目过程中会多次开票,开票确认主营业务收入时,直接将累计发生的实际成本结转为主营业务成本。 (3)项目过程中虽多次开票,但不确认收入,所有发生的实际成本月末计算为在制品,最后项目一次性

Lucas1211的博客 9533

CLR via C# 读书笔记1-4 追记

IL 的验证 IL 提升了程序的强壮性和安全性,当IL 转换成本地 CPU 指令时, CLR 会进行一个验证的处理。这个验证处理保证了 IL 代码所干的事情是安全的。比如:每个被调用方法的参数是匹配的,返回值被正确使用,函数结尾有 return 语句等等。 在 Windows 中每个进程都有其自己的虚拟地址空间,这样设计的初衷是防止一个进程错误的读写到另一个进程的内存空间而引起的安全性问题。

sqlchen的专栏 821

CANape快速上手

文章帮助记录CANape学习过程。

小弱鸡的博客 1万+

转录组数据提取技巧汇总

数据整理是数据分析的前提,而数据的正确提取则是数据整理的前提。

zfyyzhys的博客 1782

CLR via C# 3 读书笔记(4):第1章 CLR执行模型 — 1.4 执行程序集代码

托管程序集中包含元数据和IL。IL是独立于CPU的机器语言,比大多数CPU机器语言都要高级得多。IL可以访问和操作对象类型,包含创建和初始化对象、调用虚方法和直接操作数组元素、抛出和捕获异常的指令。可以将IL看成是一门面向对象的机器语言。 通常,程序员使用C#、C++/CLI、VB等高级语言进行开发。这些高级语言的编译器生成IL。和其他机器语言相同的是,IL可以用汇编语言的方式编写。微软提供了I...

weixin_33969116的博客 98

EB TRESOS 29.0.0安装教程用于MCAL配置开发

本文介绍的搭建基于NXP官网提供EB软件,进行基于标准AUTOSAR软件底层驱动配置的开发

qq_53260940的博客 1872

CLR via C# 读书笔记 4-1 线程同步-常见的锁,原生用户模式和核心模式 (上)

本文主要描述为了保证线程同步和数据安全采用的若干种不同方案 以锁为例: 1.用户模式(User-Mode)比核心模式(Kernel-Mode)快很多 2.windows操作系统无法发现用户模式的锁 (即使已经被Blocked了) ,所以线程池也不会为此新建一个线程处理新的请求 3.核心模式的锁可以使得线程停止运行, 这样就不会浪费CPU,只是浪费内存(条件满足的时候,windows会唤醒之...

weixin_30265171的博客 125

Debian 11 下用hostapd+dnsmasq搭建WiFi热点:从命令行到实战(避坑指南)

本文详细介绍了在Debian 11系统上,使用hostapd和dnsmasq从命令行搭建稳定WiFi热点的完整实战流程。内容涵盖环境准备、无线网卡AP模式检查、服务深度配置,并重点提供了从服务启动失败到客户端无法上网等常见问题的系统性排错指南,帮助用户避开配置陷阱,成功创建可用的无线接入点。

CAT789的专栏 769

DFT实训教程笔记2(bibili版本)- Scan synthesis practice

文章目录Scan synthesis practice 本博文是博主记录DFT实训教程的笔记版本,此笔记并没有对所有的知识进行记录,仅仅以自身的认知水平,来记录了一些部分笔记并加上了自己的理解。 Scan synthesis practice How to design scan clock structure? 假设一块chip里面有好几十个clock domain,如果每一个clock domain都用一个scan clock虽然会非常清晰,但是IO数目肯定不够用。 clock group: 1、no

ciscomonkey的博客 9082

CLR基础之一---认识CLR [《CLR via C#》读书笔记]

《CLR via C#》读书笔记 什么是CLR CLR的基本概念 通用语言运行平台(Common Language Runtime,简称CLR)是微软为他们的.Net虚拟机所选用的名称。这是通用语言架构(简称CLI)的微软实现版本,它定义了一个代码运行的环境。CLR运行一种称为“通用中间语言”的字节码,这个是微软的通用中间语言实现版本。 CLR运行在微软的视窗操作系统上...

weixin_30872499的博客 2241

vue项目基于WebRTC实现一对一音视频通话

vue项目基于WebRTC实现一对一音视频通话。完整代码gitee地址: https://gitee.com/wade-nian/wdn-webrtc.git。

qq_920189602的博客 6647

NET CLR via C#读书笔记 - 第一章 CLR执行模型

NET CLR via C#读书笔记 - CLR执行模型CLR执行模型1.1 CLR简介1.2 CLR执行模型1.2.1 将源代码编译成托管模块 CLR执行模型 1.1 CLR简介 CLR(Common Language Runtime(公共语言运行时))可以简单理解为是一个支持多种编程语言及多语言互操作,完整的高级虚拟机。   程序在运行的时候有着惊人数量的运行时依赖。每个有用的程序都需要某些运行时函数库,以便其能跟电脑的其它资源(如用户输入设备,磁盘文件,网络通信等)交互,同时程序也需要转换成计算机硬

CreateNewWorld的博客 471

Android 13 Settings蓝牙列表卡顿问题排查及优化过程

此时我们的卡顿优化基本完成了,我们应该要考虑内存是否会泄漏,如果大家不知道哪些需要回收可以用leakcanary和android profiler进行内存检测,看代码有没有内存泄漏。

龚礼鹏的博客 2544

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

CLR via C# 读书笔记目录

一口气写了CLR via C# 两章的笔记,有些内容自己也似懂非懂,有些则觉得很好很强大,所以趁此机会作个目录同时为每篇文章打个评分:  纯理论,无聊 有参考价值,可看 有实用价值,必看 CLR via C# 读书笔记1-1: 托管模块 (Managed Modules)定义 CLR via C# 读书笔记1-2:程序集(Assemblies)定义 CLR via C# 读书笔记1-3

sqlchen的专栏 909

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

[CLR via C#读书笔记]第一章 CLR执行模型

CLR简介 CLR(Common Language Runtime)是一个可以由多种语言使用的“运行时",它与具体使用哪种语言无关,只要编译器支持CLR,无论选择什么语言,相应编译器都会将代码编译成一个托管模块,即一个标准的32位PE(Portable Executable)文件或64位PE32+文件,该模块需要CLR才能执行。 CLR的主要功能包括(1)内存管理;(2)程序集加载;(

胖子没有错! 1302

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

NET CLR via C#读书笔记 - 第七章 常量和字段

NET CLR via C#读书笔记 - 第七章 常量和字段1 常量1.1 常量定义1.2 常量的特点和限制2 字段2.1 字段定义2.2 字段修饰符 1 常量 1.1 常量定义   常量是从值不变化的符号,定义常量符号时,值必须在编译阶段就确认,编译后常量将保存在程序集的元数据中。 1.2 常量的特点和限制   ① 只能定义编译器支持的基元类型的常量,定义非基元类型的常量,必须要将值设置为null(意义不大)。   ② 常量值永不改变,通常被视为类型的一部分(被视为静态成员,而不是实例成员)。   ③ 定

CreateNewWorld的博客 219

《CLR via C#》读书笔记-.NET多线程(三)

主要记录了CLR线程池的基本知识、CLR线程池的几个常用方法,以及执行线程与辅助线程的上下文的“流动”,对应《CLR via C#》的26.1-26.3小节

郑林的专栏 981

NET CLR via C#读书笔记 - 第九章 参数

NET CLR via C#读书笔记 - 第九章 参数1 可选参数和命名参数1.1 代码示例1.2 可选参数以及命名参数的规则和原则2 以引用方式传参3 可变数量的参数 1 可选参数和命名参数 1.1 代码示例   可选参数就是函数包含默认值得形参,命名参数是指调用方法的时候通过指定参数名称来传递实参,代码示例如下: public sealed class Demo{ //定义含有默认参数值的函数 其中x,s就是可选参数 public void dpFunc(int x = 0,string s = "

CreateNewWorld的博客 264

CLR via C# 相关读书笔记

CLR via C# 2nd CLR via C# 3nd 麒麟.NET 转载于:https://www.cnblogs.com/michael110/archive/2011/03/07/1974517.html

anyanyu2851的博客 161
上一篇: CLR via C# 读书笔记1-3
下一篇: CLR via C# 读书笔记1-4 追记
sqlchen
博客等级 码龄24年 10粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值