NGen.exe:本地代码生成器. [作用] 加快应用程序的启动速度 减小应用程序的工作集 [缺点] 没知识产权保护 生成的文件不能及时同步 执行时性能较差 [建议] 客户端考虑使用…
在 读经典——<CLR via C#>(Jeffrey Richter著) 笔记_高级管理控制(配置)中,是由程序集的发布者将程序集的一个新版本发送给管理员,后者安装程序集,并手动编辑应用程序后机器的 XML 配置文件.通常,发布者希望在修复了程序集的一个 bug 后,能采取一种容易的方式将新的程序集打包并分发给所有的用户.但是,发布者还需要一种方式告诉每个用户的 CLR 使用新的程序集版本,而不要继续使用旧版本.当然,可以指示每个用户手动修改应用程序或机器的 XML 配置文件,但这相当不方便…
[实例代码] using System; public sealed class SomeType //-------------1 { //嵌套类 private class SomeNestedType{} //-------------2 //常量.只读字段和静态可读/可写字段 ; //-------------3 ; //-------------4 ; //-------------5 //类型构造器 static SomeType(){} //-------------6 //实例构…
[基元类型推荐] 推荐直接使用 FCL 类型. [理由] 编码时不至于困惑string与String的使用.由于C#的stirng(一个关键字)直接映射到System.String(一个 FCL 类型),所以两者没有区别,都可以使用.不至于困惑int在32位操系统和64位操作系统上代表的整数不同. 有的开发人员认为int在32位操作系统上运行时,代表32位整数:而在64位操作系统上运行时,代表64位整数,这个观点完全错误.在C# 中,int 始终映射到System.Int32,所以不管在什么操作…
[概念] 编译器直接支持的数据类型 [C#基元类型与对应的 FCL 类型] C#基元类型 FCL 类型 说明 sbyte System.Sbyte 有符号8位值 byte System.Byte 无符号8号位值 short System.Int16 有符号16位值 ushort System.UInt16 无符号16位值 int System.Int32 有符号32位值 uint System.UInt32 无符号32位值 long System.Int64 有符号64位值 ulong Syst…
CLR使用 new 操作符来创建新对象,例如:Employee e=new Employee("Param1");  以下是 new  操作符所做的事情. 它计算类型及其所有基类型(一直到 System.Object,虽然它没有定义自己的实例字段)中定义的所有实例字段需要的字节数.堆上的每个对象都需要一些额外的成员——即“类型对象指针”(type object pointer)和“同步块索引”(sync block index).这些成员由CLR用于管理对象.这些额外成员的字节数会计入…
一个应用程序的XML配置文件示例: <?xml version="1.0"?> <configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <probing privatePath="AuxFiles;bin\subdir" /> <dependentAssembly>…
public sealed class Program{ public static void Main() { System.Console.WriteLine("Hi"); } } 程序运行时,CLR会加载并初始化它.CLR读取程序集的CLR头,查找标识了应用程序入口方法(Main)的MethodDefToken.然后,CLR会检索MethodDef元数据表,找到该方法的IL代码在文件中的偏移量,把这些IL代码JIT(just-in-time)编译成本地(native)代码.编译时…
1.IL 基于栈——所有指令压入一个执行栈,并从栈弹出结果. 2.IL 指令无类型——指令会判断栈中操作数的类型,并执行恰当的操作. 3.IL 最大优势——应用程序的健壮性和安全性. 将 IL 编译成本地 CPU 指令时, CLR 会执行验证过程.这个过程检查 IL 代码,确认代码所做的一切都是安全的.例如,验证会核实调用的每个方法都有正确数量的参数,传给每个方法的每个参数都具有正确的类型,每个方法的返回值都得到了正确的使用,每个方法都有一个返回语句等.在托管模块的元数据中,包含了要由验证过程使…
[前言] 方法执行前,CLR 会检测方法内代码引用的所有类型.同时 CLR 会分配一个内部数据结构,用来管理对所有引用的类型的访问. 首次执行方法时,托管程序集会把 IL 转换成本地 CPU 指令,并将其存储在一个动态分配的内存块中. 这是 CLR 的 JIT(just-in-time)编译器的功能. 在应用程序终止前,如果再调用同一个方法,会直接执行存储在动态分配内存块里的 CPU 指令. [图解] 1.当 “首次” 执行方法时,实际发生的事情如下图所示 就在 Main 方法执行之前,CLR…
1.元数据简介 全称:metadata 属性:数据表集合 产地:面向 CLR 的编译器在托管模块中生成 2.元数据内部结构及与托管模块的关系 [概述] 托管模块中包含着元数据,元数据是由一组数据表组成的.其中一些数据表描述了模块中定义的内容 [关系图] 3.元数据的用途 编译时,元数据消除了对本地 C/C++ 头和库文件的需求,因为在负责实现类型/成员的 IL 代码文件中,已包含和引用的类型/成员有关的全部信息.编译器可直接从托管模块读取元数据. Microsoft Visual Studio…
1.CLR简介 全称:Common Language Runtime(公共语言进行时) 属性:一种托管模块 使用对象:面向CLR的所有语言(C#.Basic.IL...) 核心功能:内存管理.程序集加载.安全性.异常处理.线程同步 2. 源代码与CLR的关系 3.CLR托管模块的组成部分 [PE32 或 PE32+ 头] 标准 Windows PE 文件头,类似于“公公对象文件格式”(Common Object File Format,COFF)头.如果这个头使用 PE32 格式,文件能在 Wi…
public class SomeType { } //等价于 public class SomeType { public SomeType():base(){} } [解释]如果定义的类没有显示定义任何构造器,C#编译器将定义一个默认(无参)构造器.在它的实现中,只是简单地调用了基类的无参构造器.…
[应用场景] 程序集A访问程序集B定义的Internal访问类型的类的成员. [使用方式] 在构建程序集B的时候,引入System.Runtime.CompilerServices,以此来添加InternalsVisibleTo attribute [例子] 程序集B—— using System; using System.Runtime.CompilerServices;//为了InternalsVisibleTo 属性 //当前程序集中internal类型可由以下程序集中 //的任何代码访…
[Class中,可能包含的成员] 常量, 字段, 实例构造器, 类型构造器, 方法, 操作符重载, 转换操作符, 属性, 事件, 类型(Class)…
1.代码使用 dynamic 表达式/变量来调用一个成员时,编译器会生成特殊的 IL 代码来描述所需的操作.这种特殊的代码称为 payload(有效载荷).在运行时,payload 代码根据当前由 dynamic 表达式/变量引用的对象的实际类型来决定具体执行的操作. [例子] private static dynamic Plus(dynamic arg) { return arg + arg;} [分析] 这个方法的参数类型声明为了 dynamic.在方法内部,实参被作为二元+操作符的两个操…
[重写Equals注意的事项] 1. Equals 必须是自反的:--x.Equals(x)肯定为 true 2. Equals 必须是对称的:--x.Equals(y)肯定返回与y.Equals(x)相同的值 3. Equals 必须是可传递的:--x.Equals(y)返回true, y.Equals(z)返回true,则x.Equals(z)肯定返回true 4. Equals 必须是一致的.比较的两个值没有变,Equals返回的值(true或false)也不能变 5. 让类型实现 Sys…
[注意]:如果知道自己写的代码会造成编译器反复对一个值类型进行装箱,请改成用手动方式对值类型进行装箱. [好处]:代码会变得更小.更快. [例子]: using System; public sealed class Program { public static void Main() { //创建一个未装箱的值类型变量 Int32 v = ; //编译代码时,v会被装箱三次,浪费时间和内存 Console.WriteLine("{0}, {1}, {2}", v, v, v); /…
[引用类型和值类型的区别] //引用类型(由于使用了‘class’) class SomeRef { public Int32 x; } //值类型(由于使用了‘struct’) struct SomeVal { public Int32 x; } static void ValueTypeDemo() { SomeRef r1 = new SomeRef(); //在堆上分配 SomeVal v1 = new SomeVal(); //在栈上分配 r1.x = ; //提另指针 v1x = ;…
[checked 和 unchecked 基元类型操作] 1.第一种使用方式 UInt32 invalid = )); //OK,不会抛异常 Byte b = ; b = ));//抛出OverflowException异常 2.第二种使用方式 checked {//开始一个checked块 Byte b = ; b = (Byte) (b + );//该表达式会进行溢出检查 }//结束一个checked块 简化写法 checked { Byte b = 100; b +=200; } [注意]…
命名空间和程序集不一定相关 1. 同一个命名空间中的各个类型可能是在不同的程序集中实现的.(System.IO.FileStream在MSCorLib.dll程序集中,而System.IO.FileSystemWatcher在System.dll程序集中) 2. 同一个程序集中,也可能包含不同命名空间中的类.(System.Int32和System.Text.StringBuilder类型都在MSCorLib.dll程序集中)…
1. C# 不要求任何特殊语法即可将一个对象转换为它的任何基类型,因为向基类型的转换被认为是一种安全的隐式转换: 2. 然而,将对象转换为它的某个派生类型时,C#要求开发人员只能进行显示转换,因为这样的转换可能在运行时失败: 例子: internal class Employee{ ... } public sealed class Program { public static void Main() { //不需要转型,因为new返回一个Employee对象, //而Object是Emplo…
1.解决Windows性能不稳定: 2.降低Windows程序安装的复杂性: 3.解决Windows程序不安全性: 4.解决应用程序状态在硬盘上分散: 5.允许用户灵活地控制哪些东西能够安装,哪些东西能够运行: 本节内容很少,总结得不好,以后慢慢体会~~…
Jeffrey Richter 以其多本 Windows 核心技术的经典著作而闻名,同时,他深入掌握微软的 .NET 等一系列核心技术,他所创办的 Wintellect 公司与微软有密切的合作关系,他本人也为微软的 .NET 框架贡献良多. 2012年 1 月,Jeffrey Richter 在北京接受了 InfoQ 中文站的专访,谈到 Windows 8 和 WinRT 编程,并就异步编程.Windows 编程中的可扩展性.性能和安全性方面给出自己的建议. InfoQ:从一开始,Windows…
弱弱的说,我要开始读<CLR>这本书了,怕自己不能坚持下来,特立贴监督自己,本来是大牛们涉及的区域,现在好朋友的鼓励下,勇敢的踏入,如有错误,还请各位指正.…
Jeffrey Richter's Power Threading Library The Power Threading Library consists of a number of classes to assist you with building responsive, reliable, and scalable applications and components. There are also a bunch of general-purpose utility classe…
//创建一个一维数组 int[] myIntegers; //声明一个数组引用 myIntegers = new int[100]; //创建含有100个int的数组 //创建一个二维数组 double[,] myDoubles = new double[10, 20]; //创建一个三维数组 string[,,] myStrings = new string[5, 3, 10]; //创建交错数组 Point[][] myPolygons = new Point[3][]; myPolygon…
原文:[CLR via C#]1.5 本地代码生成器:NGen.exe 1. NGen.exe工具,可以在一个程序安装到用户计算机时,将IL代码编译成为本地代码.由于代码在安装时已经编译好,所以CLR的JIT编译器不需要再运行时编译IL代码了,这有助于提升程序的性能. 2. NGen.exe可以加快程序的启动速度,减少程序的工作集. 3. NGen.exe生成的文件存在以下问题:     1)没有知识产权保护.在运行时,CLR要求访问程序集的元数据,这就要求同时发布包含IL代码和元数据的程序集.…
The TCP/IP Guide[Page 47, 48, 49] I created The TCP/IP Guide to provide you with an unparalleled breadth and depth of infor mation on TCP/IP. This meant including a lot of content in this Guide -- it has over 600 sections, subsections and individual…
The TCP/IP Guide [Page 43, 44] Scope of The TCP/IP Guide | 本书的讨论范围 The first step to dealing with a problem is recognizing that you have one. So, I have to come clean with you, my reader. I have a problem: an addiction to... detail. :-) Every time I…