摘要: GC(Garbage Collector,垃圾回收器)是一种自动回收内存的机制,释放已经不再使用的对象的内存空间。  在.NET平台中,我们的托管代码一般都不再关心内存的管理,一切都有CLR(Common language Runtime)去帮我们完成了。当我们开辟内存空间用来创建对象时,使用new关键字,这时CLR会分配一块内存存放对象,大部分时候,我们都不用自己去释放内存空间,而是由CLR在某... 阅读全文
posted @ 2010-04-04 23:53 AaronBao 阅读(3455) 评论(0) 推荐(0) 编辑
摘要: 整理了下C#中基类以及派生类的构造函数,变量声明的执行顺序。  先上试验代码:  [代码]  代码中使用了另一个类的静态int型变量记录下各个部分的执行顺序。  运行结果是:[代码]  整理下后得到:[代码]    结论:  当实例化一个子类时,父类以及子类的变量和构造函数的执行顺序如下:01子类的静态变量->02子类的静态构造函数->03子类的变量->04父类的静态变量(此时因... 阅读全文
posted @ 2010-04-01 13:18 AaronBao 阅读(2281) 评论(0) 推荐(1) 编辑
摘要: string与StringBuilder的在字符串拼接时执行效率上有差异,因为StringBuilder类中用了一个技巧:它申请了两倍的内存空间存放字符串,在调用Append方法拼接字符串时,会先检查剩余的空间是否能放下要拼接的字符串,若能放下,则将要拼接的字符串Copy到剩余的空间中,若不能放下,则再申请拼接后的字符串两倍的长度空间,将当前字符串Copy到新的空间中(除了两倍的空间外,这点跟st... 阅读全文
posted @ 2010-03-15 13:23 AaronBao 阅读(1330) 评论(0) 推荐(0) 编辑
摘要: 对于申明的一个值或引用类型的变量在内存中,是创建到堆还是栈上,经常看到的说法是:  1. 值类型创建在栈上  2. 引用类型创建在堆上  对于上述的说法其实不完备。这里要注意的是分清楚什么是变量,什么是变量的值。    实际上对于申明的变量如何分配内存还要依赖申明的变量所在的上下文环境,具体来说,有以下几个规则:  1. 每个局部变量(包括方法内部申明的) 都在栈上创建,包括引用类型的变量(仅仅是... 阅读全文
posted @ 2010-03-14 13:25 AaronBao 阅读(198) 评论(0) 推荐(0) 编辑
摘要: C#中string类型是一个比较特别的类型,它是一种引用类型,但在使用中,它表现的像一个值类型一样。这是因为string是不可变的(immutable)。  string具有以下的一些特性:  1. string是一个字符序列,是String类的一个别名,别且它是一个关键字。  2. string是引用类型,每个string实例是一个常量,是不可变的,因此对一个string进行修改时,实际上都是创... 阅读全文
posted @ 2010-03-14 11:38 AaronBao 阅读(1519) 评论(0) 推荐(1) 编辑