代码改变世界

随笔档案-2013年06月

每天学习一点.net(6) GC的原理 两步回收、代。

2013-06-19 23:30 by 黑眼圈Mars, 272 阅读, 收藏,
摘要: 今天仔细看了GC的一章。总结一下,整个GC的回收过程可以分为两步和三代。两步是指 1 标记(marking) GC遍历所有线程栈,标记所有线程栈中的根(指向堆元素,类、数组等等)。2 遍历堆中所有未被标记的对象,然后进行碎片整理(compact)。三代是指 0代、1代、2代。一次垃圾回收后,0代中不包含任何对象,对象要么被回收,要么进入1代。只有1代满了以后,才会进入2代。2代对象,至少经过了两次垃圾回收得检查。进行2代回收时,必定进行0代和1代回收。进行1代回收时,必定进行0代回收。一般大对象(>=84000bytes)的回收是在2代回收中进行的。 阅读全文

笔记:程序集和命名空间名称不一定相同,用意何在?

2013-06-15 16:48 by 黑眼圈Mars, 180 阅读, 收藏,
摘要: System.Threading 命名空间位于mscorlib.dllSystem.Diagnostics 命名空间却位于System.dll中 阅读全文

每天学习一点.net(5) 利用匿名方法Lambda表达式(=>)实现委托

2013-06-15 12:14 by 黑眼圈Mars, 528 阅读, 收藏,
摘要: Lambda表达式的语法格式为: 参数列 => 语句或语句块它是一个匿名函数。它包含表达式和语句,常用于创建委托或表达式目录树类型通常Lambda表达式的参数都是可变类型的,由编译器自动确定它的具体类型。但有时编译器难于或无法推断输入类型,就需要为参数显示指定类型,既在参数之前添加参数类型。如下所示的Lambda表达式包括连个参数x和s。其中x是int类型,而s则是string类型。(int x, string s) =>s.Length > x当Lanbda表达式没有参数时,需要使用空的括号表示,如下所示。其中,“()”表示没有参数,而Amethod()是一个具体的方法,该 阅读全文

每天学习一点.net(4) 线程池和执行上下文ExectutionContext

2013-06-15 00:08 by 黑眼圈Mars, 415 阅读, 收藏,
摘要: 每个线程都关联了一个执行上下文(ExecutionContext)数据结构。执行上下文包括安全设置(压缩栈、Thread的Principal属性和Windows身份)、宿主(System.Threading.HostExecutionContextManager)以及逻辑调用上下文数据(System.Runtime.Messaging.CallContext的LogicalSetData和LogicalGetData方法)当主线程启动另一个线程时,执行上下文就会由主线程流向辅助线程。可利用ExecutionContext类控制执行上下文的流动。一个典型的using System;using S 阅读全文

每天学习一点.net(3)利用Stopwatch 监视程序的运行时间

2013-06-14 15:01 by 黑眼圈Mars, 364 阅读, 收藏,
摘要: 命名空间:System.DiagnosticsStopwatch 实例可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间。在典型的 Stopwatch 方案中,先调用 Start 方法,然后调用 Stop 方法,最后使用 Elapsed 属性检查运行时间。Stopwatch 实例或者在运行,或者已停止;使用 IsRunning 可以确定 Stopwatch 的当前状态。使用 Start 可以开始测量运行时间;使用 Stop 可以停止测量运行时间。通过属性 Elapsed、ElapsedMilliseconds 或 ElapsedTicks 查询运行时间值。当实例正在运行或已停止 阅读全文