代码改变世界

随笔分类 -  .NET

CLR内存回收机制

2017-06-04 16:57 by Dirichlet, 293 阅读, 收藏,
摘要: 代龄机制。 通过递归构建可达对象图,不可达的对象会被回收,然后CLR会矫正对象指针。 对于终止化/Finalize对象, 一开始时这些对象指针/根/引用会被放到终止化链表中,当CLR垃圾收集开始时,那些被判定为可回收的终止化对象从终止化链表移到终止化可达队列中,有一个CLR专有线程会在这些对象执行F 阅读全文

Dispose模式释放非托管资源

2017-06-04 16:57 by Dirichlet, 314 阅读, 收藏,
摘要: 实现方式用的是设计模式里的模板模式,基类先搭好框架,子类重写void Dispose(bool disposing) 即可。 需要注意的是基类的Finalize函数也就是析构函数调用的是虚函数void Dispose(bool disposing);而子类如果重写了这个虚函数,当析构子类对象时会调用 阅读全文

.net 字符串驻留

2017-06-04 16:56 by Dirichlet, 216 阅读, 收藏,
摘要: .net中的string表达的是常量字符串。 JIT编译器编译时判断遇到的常量字符串是否在内部散列表中,如果不在,添加进去。当第一次执行到含字符串的方法时,CLR会检查该字符串是否在内部的一个散列表中,这个散列表的key是字符串,value是字符串的引用,如果不在就增加一个对该字符串的条目进去,如果 阅读全文

COM线程模型 套间概念

2017-06-04 16:53 by Dirichlet, 450 阅读, 收藏,
摘要: COM线程模型 套间概念 1) 单线程套间。线程是COM主线程,初始化COM库的进程的第一个线程。即使从其他线程访问COM组件,也不需要手工同步,COM库已经实现了同步。寓所线程里有个消息处理循环来处理对COM组件的访问。 2) 单线程套间。线程是不一定是COM主线程。同步机制同上。 3)多线程寓所 阅读全文

元数据,反射,特定属性

2017-06-04 16:50 by Dirichlet, 258 阅读, 收藏,
摘要: 元数据就是一大推表,类型定义表,字段定义表,方法定义表,属性定义表,特制属性表(Custom Attribute). 元数据是.Net Framework 的一个重要基石,反射、特制属性,就是基于元数据的, 当然特制属性是反射的一个应用。 反射其他应用? 反射主要用于FCL的类库中来提供用户更多的功 阅读全文

反射 元数据

2017-06-04 16:49 by Dirichlet, 383 阅读, 收藏,
摘要: C#里的智能感知分成两种,对于当前工程内容的智能提示,这个和C++一样,是通过代码分析出来的,比较复杂。因为这个时候程序还没有编译,没有assembly可以获得。对于引用dll里内容的智能提示,是通过反射实现的,相对简单一点,C++因为没有反射是做不到的。 metadata(元数据):是一系列的特殊 阅读全文

dynamic与var

2015-02-28 09:25 by Dirichlet, 206 阅读, 收藏,
摘要: dynamic与var示例 var是一种语法省略写法,编译器会根据上下文推断出正确的类型。 在大多数情况下,dynamic 类型与 object 类型的行为是一样的。 但是,编译器不会对dynamic 类型对象进行解析或类型检查。 编译器将有关该操作信息打包在一起,并且该信息以后用于计算运行时操作。 阅读全文

regression build test

2014-04-01 10:27 by Dirichlet, 422 阅读, 收藏,
摘要: Q: 什么是regression test以及为什么做regression test? A: fixing1进到build之后,QA/tester要进行手动测试,也可能会写automation。但是随后会有很多的其他的fixing进入到build,可能导致之前的fixing不工作了,为了确保之前的f 阅读全文

ICloneable接口 Clone 深拷贝 浅拷贝

2013-09-15 21:06 by Dirichlet, 463 阅读, 收藏,
摘要: 需要字段本身也实现了深拷贝Clone。应用场景不多,意义不大。 1. 隐含式地要求其子类和引用类也要实现ICloneable接口,如果引用层次比较深类似一个网状或树形接口,增加复杂性。 2. 考虑给sealed class实现ICloneable。 3. 值类型或者全都是简单值类型的引用对象用赋值可 阅读全文

事件与委托的联系和区别

2013-09-15 18:00 by Dirichlet, 32928 阅读, 收藏,
摘要: -事件是一种特殊的委托的实例,或者说是受限制的委托,是委托一种特殊应用,在类的外部只能施加+=,-=操作符,二者本质上是一个东西。 -event ActionHandler Tick; // 编译成创建一个私有的委托示例, 和施加在其上的add, remove方法. -event只允许用add, r 阅读全文

CLR 虚方法调用和接口方法调用

2013-08-05 22:49 by Dirichlet, 317 阅读, 收藏,
摘要: 不知接口方法和虚方法分发有什么区别?似乎在CIL中都是callvirt指令。 对,MSIL里都是callvirt,但JIT的时候得到了不同的处理:对虚方法的分发是编译成这样: X86代码 mov ecx, esi ; 假设现在ESI是一个指向对象实例的指针,复制到ECX里 mov eax, dwor 阅读全文

VS里用Sos扩展调试CLR总结

2013-08-05 22:48 by Dirichlet, 256 阅读, 收藏,
摘要: 暂时不用Windbg,用VS来调试CLR。 1) Enable unmanaged debugging 2) Load sos.dll into vs. !DumpHead -type SimpleClass 获得SimpleClass对象的一个地址,0x0280b630 3) 观察0x0280b6 阅读全文

COM组件双接口对象模型

2013-08-04 14:54 by Dirichlet, 614 阅读, 收藏,
摘要: 模型如下: 这里COM对象一共实现了三个接口,IUnknown,IDispatch, Ixxx. 每个COM都必须实现IUnknown,不考虑在内的话共实现了IDispatch和自定义接口Ixxx两个,故称双接口对象。 IDispatch主要是给解释型语言脚本用的,因为脚本没办法直接调用多态的接口函 阅读全文

COM组件多接口对象模型

2013-08-04 14:38 by Dirichlet, 1422 阅读, 收藏,
摘要: COM组件有两种接口类型,Dual and Custom,如下图所示。本文说的是Custom。所谓多接口COM对象是指此COM对象实现了多于一个的自定义接口,即Custom接口。 接口图如下: 需要注意的是最终实现的COM对象用的不是虚继承而是普通的多继承,因为被多继承的IUnknown接口是不含任 阅读全文

题目

2011-09-08 08:46 by Dirichlet, 198 阅读, 收藏,
摘要: 1. DLL概念、使用 2. 线程、进程区别联系 3. 敏捷开发 4. 排序。其他数据接口、算法。 5. 事件委托 6. 设计模式 7. 项目介绍、类图 8. OO原则 9. CLR机制 10. new 关键字,装箱拆箱哪个快?Dispose,finalize过程,GC代龄收集原理。 11. 多线程 阅读全文

异常设计准则

2011-08-30 22:13 by Dirichlet, 580 阅读, 收藏,
摘要: 1. 抛出异常/设计异常(框架层) a. 先捕获,包装捕获的异常再抛出。包装异常时务必要指定内部异常。 b. 异常消息进行本地化,支持多语言。//设计当前引发异常层次(当前框架层次)的所有错误代码,每个异常都有一个错误代码表示。 2. 捕捉异常 a. 不要通过在框架代码中捕捉非特定异常(如 Syst 阅读全文

volatile (C# Reference) (转自msdn)

2011-08-29 22:42 by Dirichlet, 363 阅读, 收藏,
摘要: The volatile keyword indicates that a field might be modified by multiple threads that are executing at the same time. Fields that are declared volati 阅读全文

对制造者线程和使用者线程进行同步

2011-08-29 22:01 by Dirichlet, 349 阅读, 收藏,
摘要: 初始化如下: 等待线程如下: 触发事件的线程如下: 1. 触发事件的线程autoRestEvent.Set()发出信号; 2. 等待线程autoRestEvent.WaitOne()得到信号,并立刻将事件重置为无信号状态,开始往后执行。 3. 可以像1,2步一样继续使用Set, WaitOne进行同 阅读全文

《Effective C#》 翻译札记(转载)

2011-07-26 09:49 by Dirichlet, 254 阅读, 收藏,
摘要: 转自:http://www.microsoft.com/china/msdn/library/langtool/vcsharp/EffectiveCsharp.mspx?mfr=true 作者:李建忠 最近在翻译Bill Wagner先生的《Effective C#》一书,由于自己早先也有写作Eff 阅读全文

SOS 调试扩展 (SOS.dll)(转自msdn)

2011-06-26 19:33 by Dirichlet, 1205 阅读, 收藏,
摘要: http://msdn.microsoft.com/zh-cn/library/bb190764(v=VS.90).aspx SOS 调试扩展 (SOS.dll) 通过提供有关内部公共语言运行库 (CLR) 环境的信息,帮助您在 WinDbg.exe 调试器和 Visual Studio 中调试托管 阅读全文