CLR Via C#
李董
这个作者很懒,什么都没留下…
展开
-
FCL提供的编码方式-笔记-编码方式
FCL提供的编码方式中最常用的是UTF-16和UTF-8:UTF-16(Unicode编码)将每个16位字符编码成2个字节。它不会对字符产生任何影响,而且不会涉及压缩处理——性能非常出色。可以用于从“低位优先”转换成“高位优先”,或者从“高位优先”转换成“低位优先”。UTF-8将部分字符编码成1个字节,部分字符编码成2个字节,部分字符编码成3个字节,以及部分字符编码成4个字节。值在0x0080之下的字符压缩成1个字节,它们适用于表示英美地区使用的字符。0x0080—0x07FF的字符被转换成2个字节,它们适原创 2010-12-29 22:15:00 · 692 阅读 · 0 评论 -
CLR Via C#读书笔记——Monitor类同步线程【2011-02-10】
<br />为了对同步块加锁或解锁,我们需要调用System.Threading.Monitor类中定义的静态方法。调用下面的方法可以对对象的同步块加锁:<br />static void Enter(Object obj);<br />调用这个方法时,该方法首先检查指定对象的同步块的索引是否为负值,如果是负值,那么方法就找到一个空闲的同步块,然后方法将该同步块的索引记录到对象的同步块索引中。顺便说一下,CLR拥有一个线程安全的方式来查找空闲的同步块并将其与对象关联。一旦同步块与对象关联,Monitor.E原创 2011-02-10 16:14:00 · 689 阅读 · 0 评论 -
CLR Via C#读书笔记——垃圾收集相关知识点【2011-01-20】
<br /> 在现实世界中,经常会出现多个线程同时访问托管堆的情况,或者至少会有多个线程同时操作托管堆中分配的对象。当某个线程触发垃圾收集器时,其他线程就不能再访问任何对象(包括各线程自己堆栈上的对象引用),这是因为垃圾收集器可能会移动这些对象,改变它们内存地址。<br /> 因此当垃圾收集器开始运行时,所有执行托管代码的线程都必须被挂起。CLR使用几种不同的机制来确保安全的挂起线程,以便执行垃圾收集。CLR中存在多种机制的目的是为了尽可能地让线程保持运行,并且尽可能地减少开销。<br />原创 2011-01-20 14:33:00 · 683 阅读 · 0 评论 -
CLR Via C# 2nd勘误【2011-01-19】
<br /> <br /> <br /><br />表2:《框架设计(第2版)》勘误(第2-3次印刷)<br /> <br />页码<br />位置<br />Original<br />Corrected<br />description<br />100<br />第5段<br />根据第4针…<br />根据第4章…<br />感谢egman<br />156<br />中间示例<br />public SomeValType(Int32x) {<br />public SomeValType(Int转载 2011-01-19 14:38:00 · 777 阅读 · 0 评论 -
CLR Via C#读书笔记——using语句【2011-01-19】
<br />using System;using System.IO;public static class Program{ public static void Main() { Byte[] bytesToWrite=new Byte[]{1,2,3,4,5}; using(FileStream fs=new FileStream("Temp.dat",FileMode.Create)){ fs.Write(bytesT原创 2011-01-19 12:04:00 · 654 阅读 · 0 评论 -
CLR Via C#读书笔记——Finalize方法被调用的时机【2011-01-18】
Finalize方法在垃圾收集结束时被调用,有5种事件会导致一个对象的Finalize方法被调用:1.第0代对象充满:第0代对象充满时开始执行垃圾收集。该事件是目前导致Finalize方法被调用的最常见的一种方式,因为事件通常在应用程序代码运行过程中分配新对象的时候发生。2.代码显示地调用System.GC的静态方法Collect:代码可以显式地请求CLR执行垃圾收集。虽然Microsoft强烈建议不要这样做,但某些时候强制执行垃圾收集对应用程序来说还是有意义的。3.Windows报告内存不足:CLR内部使原创 2011-01-18 19:30:00 · 739 阅读 · 0 评论 -
CLR Via C#读书笔记——StreamWriter中的依赖问题【2011-01-19】
<br />System.IO.FileStream类型允许用户打开文件进行读写操作。为了提高性能,该类型的实现使用了内存缓冲区。只有在内存缓冲区充满时,System.IO.FileStream类型才会将缓冲区的数据刷新到文件中。FileStream类型只支持字节的读写操作。如果我们希望支持字符或者字符串的读写操作,可以使用System.IO.StreamWriter类型,如下代码:<br /> <br />FileStream fs=new FileStream("DataFile.dat",FileMo原创 2011-01-19 13:37:00 · 1288 阅读 · 0 评论 -
CLR Via C#读书笔记——垃圾收集(Timer)【2011-01-18】
using System;using System.Threading;namespace TimerInstanceGCCollection{ class Program { static void Main(string[] args) { //创建一个每隔2000毫秒就调用一次TimerCallback方法的Timer对象 Timer t = new Timer(TimerCa原创 2011-01-18 14:57:00 · 690 阅读 · 0 评论 -
CLR Via C#读书笔记——CLR分配内存【2011-01-17】
当应用程序的进程完成初始化后,CLR将保留一块连续的地址空间,这段空间最初并不对任何应用物理内存。该地址空间即为托管堆。托管堆上维护着一个指针,我们称之为NextObjPtr。该指针表示下一个新建对象分配时在托管堆中所处的位置。刚开始的时候,NextObjPtr被设为CLR保留地址空间的基地址。 IL指令newobj负责创建新的对象。许多语言(C#,C++/CLI以及Microsoft Visual Basic)都提供了一个new操作符,该操作符会使编译器在相应方法的IL代码中产生一个newobj原创 2011-01-17 19:50:00 · 702 阅读 · 0 评论 -
CLR Via C#读书笔记——可空值类型操作符运算【2011-01-14】
一元操作符:如果操作数为null,结果为null。二元操作符:两个操作数中任何一个为null,结果为null。相等性操作符:如果两个操作数都为null,两者相等。如果一个操作数为null,则两者不想等。如果两个操作数都不为null,对值进行比较,判断它们是否相等。比较操作符:两个操作数中任何一个为null,结果为false。如果两个操作数都不为null,就对值进行比较。应该注意的是,在操作可空实例时,会生成大量代码。原创 2011-01-14 11:08:00 · 706 阅读 · 0 评论 -
CLR控制字段的布局
<br />为了提高性能,CLR能按照它所选择的任何方式来排列类型的字段。为了向CLR发出指示,需要在定义的类或者结构上应用System.Runtime.InteropServices.StructLayoutAttribute属性。可以向这个属性的构造器传递LayoutKind.Auto,让CLR自动排列字段;或者传递LayoutKind.Sequential,让CLR保持我们的字段布局;或者传递LayoutKind.Explicit,并用偏移量在内存中显示地排列字段的顺序。在编程人员定义的类型上,如果不原创 2011-05-18 21:52:00 · 724 阅读 · 0 评论