摘要:
Several Tips:0. Dispose() requires explicitly called, no matter manually calling it OR putting it into finalizer. 1. 不要override Finalize(),而是提供析构函数。编译器会在IL里把他 编译成Finalize().2. View C# IL code:IL DASM.3. In callstack window, RMB click, go to disassembly. 4. In case you want to force a managed class t 阅读全文
摘要:
1. Persistence1. Key concept is meta type and meta data. take persisting a class as example. Basically, we need to be able to save it into binary file and be able to read it back from binary stream. The basic rule to achieve this: 1. In order to be able to know where to read and how much bytes needs 阅读全文
摘要:
.net Reflector is convenient to view a assembly's resource especially string table. 阅读全文
摘要:
首先,关于GC:1. 它不是基于引用计数的。那是COM用的东西,不够强壮而且expensive。2. 只要一个对象有一个reference还在,它肯定不会被GC干掉;但是一个没有任何reference的对象,也只能成为一个candidate tobedeleted object对于GC而言。3. GC.collect()可以被显式调用,并且确实可以做些事情,但是,不一定能干掉你想要干掉的对象,因为它只是一个candidate。4. GC只有在memory pressure的时候才会开始干活。对于weak reference而言:1. 个人认为它的适用场合是: 1)创建这个对象很贵,并且对象很占 阅读全文
摘要:
今天碰到了eyeOS,注册一个用户登录进去看了下:挺像一个OS的样子,操作起来比如打开,新建文件;右键菜单,就和你在desktop上操作一样。这个东西很好。能不能搞好关键看两点:1. 基于它的web app的数量和质量。也搞个app store来促进开发者参与进来?但是,大前提是这个eyeOS的普及性。。就像apple能搞起appstore来。。决心是可以从它的网站上看出来的:它一开始设计的时候就不是想简单的做个仅仅包含有限的webapp的site,而是精心设计了extensible framework来支持在这个platform上面开发新的webapp。。2. 如何推广让更多的人用起来。ht 阅读全文
摘要:
参加了一次multithreading的team内部training,做了些note:1. 多核CPU,必然配备对应个数的register组。并且,如果是超线程CPU,比如6核超线程CPU,可以有6*2组register。2. 一个线程,有它自己单独的stack以及TLS。对于一般的单线程程序,因为就一个main主线程,感觉就一个stack,实际只是因为只有一个线程在跑。3. Fiber VS thread (或许需要进一步的总结): 1)如果有Fiber这一级的管理调度,那么它是线程内的。Fiber从属于某一个线程。 2)thread是OS级进行支持的,线程的调度由OS执行,并且现代的OS多 阅读全文
摘要:
元数据,metadata,最本质的解读:data about data,info about information.1.(针对dotnet)反射是一种在运行时获取和使用元数据的技术。其本质在于元数据。对应一个程序集的描述是Assembly类,对应一个Class的元数据就是Type,当然还有ConstructorInfo、 PropertyInfo、FieldInfo、EventInfo、MethodInfo、ParameterInfo、Attribute等。2.Attribute也是反射一个非常诱人的技术,它可以使用户通过声明一个Attribute而附加一些有用的功能,声明Attribute 阅读全文
摘要:
1. Persistence in computer science refers to the characteristic of state that outlives the process that created it. 2. Serializatioin. In computer science, in the context of data storage and transmission, serialization is the process of converting a data structure or object into a format that can be 阅读全文
摘要:
1. 理解虚函数赖以生存的底层机制:vptr + vtable。虚函数的运行时实现采用了VPTR/VTBL的形式,这项技术的基础: ①编译器在后台为每个包含虚函数的类产生一个静态函数指针数组(虚函数表),在这个类或者它的基类中定义的每一个虚函数都有一个相应的函数指针。 ②每个包含虚函数的类的每一个实例包含一个不可见的数据成员vptr(虚函数指针),这个指针被构造函数自动初始化,指向类的vtbl(虚函数表) ③当客户调用虚函数的时候,编译器产生代码反指向到vptr,索引到vtbl中,然后在指定的位置上找到函数指针,并发出调用。2. 对于一个large project,对于一个frequent u 阅读全文
摘要:
来自coolshell。 有这样一个面试题——请把从1到1000的数打印出来,但你不能使用任何的循环语句或是条件语句。更不能写1000个printf或是cout。用C/C++语言。个人比较赞赏的思路是下面两个:1. 函数指针数组结合n/1000的结果作为数组的index。void yesprint(int i);void noprint(int i);typedef void(*fnPtr)(int);fnPtr dispatch[] = { yesprint, noprint };void yesprint(int i) {printf("%d\n", i);dispat 阅读全文