随笔分类 - CLR via C#
摘要:1. 线程池基础。 创建和销毁线程是一个昂贵的操作,要耗费大量时间。太多的线程会浪费内存资源。由于操作系统必须调度可运行的线程并执行上下文切换,所以大多的线程还对性能不利。为了改善这个情况,CLR包含了代码来管理它自己的线程池(thread pool)。线程池是你的应用程序能使用的线程集合。每CLR
阅读全文
摘要:1. Microsoft 设计这个OS内核时,决定在一个进程中运行应用程序的每个实例。进程实际是应用程序的实例要使用的资源的集合。每个进程都被赋予了一个虚拟地址空间,确保在一个进程中使用的代码和数据无法由另一个进程访问。 2. 如果发生死循环会停止响应,所以有了线程,线程的职责是对CPU进行虚拟化。
阅读全文
摘要:1. 异常是指成员没有完成它的名称所宣称的行动,异常类继承System.Exception。 2. .Net Framework 异常处理机制是用Microsoft windows提供的结构化异常处理(Structured Exception Handing, SEH)机制构建的。 3. AppDo
阅读全文
摘要:1. 访问一个资源所需的步骤 1). 调用IL指令newobj,为代表资源的类型分配内存(一般使用C# new 操作符来完成)。 2). 初始化内存,设置资源的初始状态并使资源可用。类型的实例构造器负责设置初始状态。 3). 访问类型的成员来使用资源(有必要可以重复)。 4). 摧毁资源的状态以进行
阅读全文
摘要:1. 字符串一经创建,便不能以任何方式修改,只能修改引用。 2. ToLowerInvariant() 和 ToUpperInvariant() 以忽略语言文化的方式将字符串转换为小写或大写形式。性能比ToLower() 和 ToUpper()好。而且Microsoft对执行大写比较的代码进行了优化
阅读全文
摘要:1. 值类型的变量永远不会为null,所有需要使用System.Nullable<T> 2. 操作数是null,结构是null;==、!=操作数都为null,则返回true;<、>、<=、>= 任何一个操作数为null,则返回false。 3. 操作可空类型的速度慢于非可空类型速度。 4. ?? 不
阅读全文
摘要:1. 特性继承自System.Attribute,能作用于TypeDef(类、结构、枚举、接口和委托),MethodDef(含构造器),ParamDef,FieldDef,PropertyDef,EventDef,AssemblyDef,ModuleDef。 2. AttributeUsageAtt
阅读全文
摘要:1. 委托是方法的包装器,使方法能通过包装器来间接回调。在一个类型中通过委托来调用另一个类型的私有成员,只要委托对象是具有足够安全性/可访问性的代码创建,便没有问题。 2. 协变性:方法能返回从委托的返回类型派生的一个类型。逆变性:方法获取的参数可以是委托的参数类型的基类。 3. 委托实际上是一个类
阅读全文
摘要:1. 数组隐式继承 System.Array,所以数组是引用类型。变量包含的是对数组的引用,而不是包含数据本身的元素。 2. 数组协变性。将数组从一种类型转换为另一种类型。 string[] sa = new string[100]; object[] oa = sa; oa[5] = "Jeff"
阅读全文
摘要:1. 枚举继承System.Enum,后者继承 System.ValueType,所以枚举是值类型。 2. 枚举不能定义任何方法、属性和事件,不过可以定义扩展方法 3. ToString()方法 Color c = Color.Blue; Console.WriteLine(c); // "Blue
阅读全文