摘要: 何时回收1. window 报内存不足2. 强制调用GC.Collect3. 内存不足,正确说法是第0代对象充满时。4. CLR卸载AppDomain,GC将所有代龄的对象回收。5. 物理内存不足代龄(Generation):为啥会有这个东西,因为内存回收后会留下内存“空洞”,需要挪动内存并且对对象重定位。这样很耗性能,所有就引入generation的东西,降低垃圾回收的频率。微软强烈不建议通过GC.Collect方法来强制执行垃圾回收,因为会是对象代龄不断提升。Finalize:C#不可以显示重写Finalize方法,只能通过析构函数来实现struct 不允许定义析构函数,只有class可以 阅读全文
posted @ 2013-04-21 18:21 AlexHHC 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 我很早就能够区分它们,但是要描述他们的区别就觉得很难,所以还是要整理一下。进程和线程都是由操作系统执行程序的基本单元,系统利用该基本单元实现系统对应用的并发性。简而言之,一个程序至少有一个进程,一个进程至少有一个线程.、相同点:1. 二者都具有ID,一组寄存器,状态,优先级以及所要遵循的调度策略。2. 每个进程都有一个进程控制块,线程也拥有一个线程控制块。区别:1. 创建和切换的开销:前者开销大,后者开销较小。这就是最基本的区别。2. 粒度:线程的划分尺度小于进程,使得多线程程序的并发性高。3. 地址空间:进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个 阅读全文
posted @ 2013-04-21 16:38 AlexHHC 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 相同:1. 都不能被实例化,都可以通过继承实现其抽象方法2. 是抽象编程的技术基础不同:多继承。接口可以多继承,抽象类不可以字段。抽象类可以包含字段,接口不可以具体实现的成员。抽象类可以有具体实现的成员,接口不能struct。接口可用与值类型,Struct可以继承接口,抽象类不能can-do vs is-a。接口着重与can-do的关系,抽象类着重IS-A 的关系成员能否被public 等修饰。接口的所有成员都不能用public,private 等修饰符修饰 ,抽象类可以。 阅读全文
posted @ 2013-04-21 16:09 AlexHHC 阅读(220) 评论(0) 推荐(0) 编辑
摘要: 线程池适合场合事实上,线程池并不是万能的。它有其特定的使用场合。线程池致力于减少线程本身的开销对应用所产生的影响,这是有前提的,前提就是线程本身开销与线程执行任务相比不可忽略。如果线程本身的开销相对于线程任务执行开销而言是可以忽略不计的,那么此时线程池所带来的好处是不明显的,比如对于FTP服务器以及Telnet服务器,通常传送文件的时间较长,开销较大,那么此时,我们采用线程池未必是理想的方法,我们可以选择“即时创建,即时销毁”的策略。(1) 单位时间内处理任务频繁而且任务处理时间短(2) 对实时性要求较高。如果接受到任务后在创建线程,可能满足不了实时要求,因此必须采用线程池进行预创建。(3) 阅读全文
posted @ 2013-04-21 13:58 AlexHHC 阅读(228) 评论(0) 推荐(0) 编辑
摘要: .NET在一个进程中准备了两个线程池,除了上篇文章中所提到的CLR线程池之外,它还为异步IO操作的回调准备了一个IO线程池。IO线程池的特性与CLR线程池类似,也会动态地创建和销毁线程,并且也拥有最大值和最小值。在使用异步IO方式读取了一段文本之后,下一步操作往往是对其进行分析,这就进入了计算密集型操作了。但对于计算密集型操作来说,如果使用整个IO线程池来执行,我们无法有效的控制某项任务的运算能力。因此在有些时候,我们在回调函数内部会把计算任务再次交还给独立的线程池。这么做从理论上看会增大线程调度的开销,不过实际情况还得看具体的评测数据。如果它真的成为影响性能的关键因素之一,我们就可能需要使用 阅读全文
posted @ 2013-04-21 12:18 AlexHHC 阅读(215) 评论(0) 推荐(0) 编辑
摘要: Readers and writers are queued separately. When a thread releases the writer lock, all threads waiting in the reader queue at that instant are granted reader locks; when all of those reader locks have been released, the next thread waiting in the writer queue, if any, is granted the writer lock, and 阅读全文
posted @ 2013-04-21 12:16 AlexHHC 阅读(88) 评论(0) 推荐(0) 编辑
摘要: http://hi.baidu.com/yiwuzhi/blog/item/c5a2dba561dcbdbacbefd038.html1:单线程程序中推荐使用Dictionary,有泛型优势,不用装箱拆箱,且读取速度较快,容量利用更充分.2:多线程程序中推荐使用Hashtable, 要装箱拆箱,默认的Hashtable允许单线程写入,多线程读取,对Hashtable进一步调用Synchronized()方法可以获得完全线程安全的类型.而Dictionary非线程安全,必须人为使用lock语句进行保护,效率大减.3:Dictionary有按插入顺序排列数据的特性(注:但当调用Remove()删除 阅读全文
posted @ 2013-04-21 12:09 AlexHHC 阅读(119) 评论(0) 推荐(0) 编辑