摘要: 1.初始化器(在声明字段的时候就直接初始化,而不是在构造函数中处理) 初始化生成的代码会放置在类型的构造函数之前。初始化会在执行类型的基类的构造函数之前被执行,并且它们是按你声明的先后关系顺序执行的。2.什么情况下不应该初始化变量 首先就是,如果你是初始化一个对象为0,或者为null。系统默认会在你任何代码执行前,为所有的内容都初始化为0。系统置0的初始化是基于底层的CPU指令,对整个内存块设置。你的任何其它置0的初始化语句是多余的。C#编译器忠实的添加额外的指令把内存设置为0(多余的设置)。这并没有错,只是效率不高(牵涉装箱和拆箱)。事实上,如果是处理值类型数据,这是很不值的。第二个低效率的 阅读全文
posted @ 2011-01-05 22:47 yu_liantao 阅读(309) 评论(0) 推荐(0) 编辑
摘要: 1.垃圾收集器(GC)控制着托管内存。但是我们需要对非托管代码进行处理(数据库连接,文件句柄,GDI+对象,COM对象等)2.垃圾收集器是运行在一个单独的线程中来移除程序中不再使用的内存。并且还会压缩托管堆,使得空闲内存能集中在一个连续的区域。3.对于非托管资源我们需要在类型中定义一个终结器,以此来确保释放这些系统资源。在对象的内存被回收之前,系统会调用终结器,这样我们可以在终结器中编写我们的代码来释放该对象占有的非托管资源。值得注意的是对象的终结器是在对象成为垃圾之后调用的,但是在内存归还之前,但是我们无法精确的控制“不再使用对象”和“执行终结器”这2个事件之间的关系。4.当GC发现某个对象 阅读全文
posted @ 2011-01-05 00:05 yu_liantao 阅读(286) 评论(0) 推荐(0) 编辑