Fork me on GitHub

随笔分类 -  CLR

计算限制的异步操作
摘要:一、线程池 二、执行上下文 三、协作式取消和超时 四、任务 五、并行语言集成查询(PLINQ 六、执行定时计算限制操作 一、线程池 1,CLR初始化时,线程池中是没有线程的。在内部,线程池维护了一个操作请求队列 2,每CLR一个线程池,这个线程池有CLR控制的所有AppDomain共享。如果一个进程 阅读全文

posted @ 2017-08-29 21:21 *Hunter 阅读(267) 评论(0) 推荐(1)

线程基础
摘要:一、线程开销 线程有空间(内存耗用)和时间(运行时的执行性能)上的开销①线程内核对象OS为系统中创建的每个线程都分配并初始化这种数据结构之一(对线程进行描述的属性、线程上下文)。上下文是包含CPU寄存器集合的内存块。对于x86,x64和ARM CPU架构,线程上下文分别使用约700,1240,和35 阅读全文

posted @ 2017-08-26 15:30 *Hunter 阅读(209) 评论(0) 推荐(0)

运行时序列化
摘要:一、序列化与反序列化 序列化是将对象图转换成字节流的过程,反序列化是将字节流转换回对象图的过程 注意事项: ①保证代码为序列化和反序列化使用相同的格式化器②可将多个对象图序列化到一个流中 ③序列化对象时,类型的全名和类型定义程序集的全名会被写入流。BinaryFormatter默认输出程序集的完整标 阅读全文

posted @ 2017-07-24 21:08 *Hunter 阅读(315) 评论(0) 推荐(0)

程序集加载和反射
摘要:一、程序集加载 1,根据程序集名称查找程序集 2,根据程序集文件路径名(包含扩展名)查找程序集 3,加载程序集时,确保程序集中的任何代码不会执行 二、反射的性能 1,反射的两个缺点①反射造成编译时无法保证类型安全性。由于反射严重依赖字符串,所以会丧失编译时的类型安全性。例如,执行Type.GetTy 阅读全文

posted @ 2017-07-19 20:50 *Hunter 阅读(453) 评论(1) 推荐(0)

CLR寄宿和AppDomain
摘要:一、CLR寄宿 .net framework在windows平台的顶部允许。者意味着.net framework必须用windows能理解的技术来构建。所有托管模块和程序集文件必须使用windows PE文件格式,而且要么是windows exe文件,要么是DLL文件 1,MSCorEE.dll(垫 阅读全文

posted @ 2017-07-13 21:43 *Hunter 阅读(1270) 评论(0) 推荐(1)

托管堆和垃圾回收
摘要:一、托管堆基础 1,访问一个资源(文件、内存缓冲区、屏幕空间、网络连接、数据库资源等)所需的步骤 ①调用IL指令newobj,为代表资源的类型分配内存(一般使用c# new操作符来完成) ②初始化内存,设置资源的初始状态并使资源可用。类型的实例构造器负责设置初始状态 ③访问类型的成员来使用资源(有必 阅读全文

posted @ 2017-07-01 16:36 *Hunter 阅读(1105) 评论(0) 推荐(0)

异常和状态管理
摘要:一、异常处理机制 1,应该在try中放置多少代码?取决于状态管理。如果在一个try块中执行多个可能抛出同一个异常类型的操作,但不同的操作有不同的异常恢复措施,则应该将每个操作都放到他自己的try块中,这样才能正确地恢复状态2,try、finally,catch执行顺序 3,finally设计 二、S 阅读全文

posted @ 2017-06-24 15:33 *Hunter 阅读(219) 评论(0) 推荐(0)

可空值类型
摘要:[Serializable,StructLayout(LayoutKind.Sequential)] public struct Nullable where T : struct { //这两个字段标识状态 private Boolean hasValue = false;//假定null internal T value = d... 阅读全文

posted @ 2017-06-22 21:41 *Hunter 阅读(160) 评论(0) 推荐(0)

定制特性
摘要:1,定制特性 ①C#允许用一个前缀明确指定特性要应用的目标元素 ②AttributeUsage. Inherited(特性应用于基类时,是否同时应用于派生类和重写的方法) 2,检测定制特性 方法名称 说明 IsDefined 至少有一个指定的Attribute派生类的实例与目标关联,就会返回true 阅读全文

posted @ 2017-06-18 13:58 *Hunter 阅读(174) 评论(0) 推荐(0)

委托
摘要:1,委托基础 ①System.MulticastDelegate派生自System.Delegate,后者派生自System.Object。由于历史原因造成两个委托类(MulticastDelegate、Delegate)。即使创建的所有委托类型都将MulticastDelegate作为基类,个别情 阅读全文

posted @ 2017-06-12 21:56 *Hunter 阅读(197) 评论(0) 推荐(0)

数组
摘要:1,所有数组都隐式派生自System.Array 2,所有数组都隐式实现IEnumerable,ICollecation,IList ①创建一个0基数组类型时,CLR自动是数组类型实现IEnumberable<T>,ICollection<T>,IList<T>。同时,还为数组类型的所有基类型实现这 阅读全文

posted @ 2017-06-03 18:12 *Hunter 阅读(192) 评论(0) 推荐(0)

枚举类型和位标志
摘要:一、枚举类型 1,编译枚举时,C#编译器把每个符号转换成类型的一个常量字段。例如将Color枚举类型看成以下代码 简单的说,枚举是一个结构,其中定义了一组常量字段和一个实例字段。常量字段会嵌入程序集的元数据中,并可以通过反射来访问 2,以下代码显示了如何声明一个基础类型为byte的枚举类型: 3,枚 阅读全文

posted @ 2017-05-27 21:00 *Hunter 阅读(374) 评论(0) 推荐(0)

字符串
摘要:一、StringComparison 1,出于编程目的而比较字符串时,应该总数使用StringComparison.Ordinal或者StringComparison. OrdinalIgnoreCase。忽略语言文化是字符串比较最快的方式 2,要以语言文化正确的方式来比较字符串(通常为了向用户显示 阅读全文

posted @ 2017-05-03 20:42 *Hunter 阅读(296) 评论(0) 推荐(0)

字符、字符串和文本处理
摘要:一、StringComparison 阅读全文

posted @ 2017-04-27 20:54 *Hunter 阅读(200) 评论(0) 推荐(0)

接口
摘要:一、显示接口方法实现(EIMI) 将定义方法的那个接口的名称作为方法的前缀 public class SimpleType : IDisposable { public void Dispose() { Console.WriteLine("SimpleType Dispose"); } //定义E 阅读全文

posted @ 2017-04-24 22:09 *Hunter 阅读(156) 评论(0) 推荐(0)

泛型
摘要:一,泛型的优势 1,源代码保护使用泛型算法的开发人员不需要访问算法的源代码。然而,使用c++模板的泛型技术时,算法的源代码必须提供给准备使用算法的用户2,类型安全将泛型算法应用于一个具体的类型时,编译器和CLR能理解开发人员的意图,并保证只有与指定数据类型兼容的对象才能用于算法。试图使用不兼容的类型 阅读全文

posted @ 2017-04-18 21:48 *Hunter 阅读(121) 评论(0) 推荐(0)

事件
摘要:一、设计要公开事件的类型1,第一步:定义类型来容纳所有需要发送给事件通知接受者的附加信息 2,第二步:定义事件成员 3,第三步:定义负责引发事件的方法来通知事件的登记对象4,第四部:定义方法将输入转化为期望事件 //第一步:定义类型来容纳所有需要发送给事件通知接受者的附加信息 public clas 阅读全文

posted @ 2017-04-10 21:45 *Hunter 阅读(156) 评论(0) 推荐(0)

栈帧
摘要:1, 什么是栈帧? 在调用方法的时候,内存从栈的顶部开始分配,保存和方法关联的一些数据项。这块内存叫方法的栈帧 2,栈帧包含的内存保存如下内容 ①返回地址,也就是在方法退出的时候继续执行的位置 ②这些参数分配的内存,就是这方法的值参数,或者还可能是参数数组(如果有的话) ③各种和方法调用相关的其他管 阅读全文

posted @ 2017-04-06 12:38 *Hunter 阅读(366) 评论(0) 推荐(0)

属性
摘要:匿名类型 //定义类型,构造实例,并初始化属性 var o1 = new {Name = "zhang"};①编译器会判断每个表达式的类型,推断类型的私有字段②为每个字段创建公共只读属性③创建一个构造器接受这些表达式,把表达式的求值结果初始化只读字段④编译器还会重写Object的Equeals和Ge 阅读全文

posted @ 2017-04-05 21:23 *Hunter 阅读(165) 评论(0) 推荐(0)

方法
摘要:一、实例构造器和类(引用类型) 1,极少数情况下可以在不调用实例构造器的前提下创建类型的实例①Object的MemberwiseClone方法②运行时序列化器反序列化对象时,通常也不需要调用构造器 由于有三个构造器,所以编译器生成三次初始化m_x,m_s,m_d的代码 每个构造器初始化一次。可以在一 阅读全文

posted @ 2017-03-21 22:01 *Hunter 阅读(143) 评论(0) 推荐(0)

导航

AmazingCounters.com