上一页 1 ··· 7 8 9 10 11

2010年11月18日

CLR via C# 读书笔记 3-2 AutoResetEvent ManualResetEvent 和Semaphore

摘要: 这三个对象都经常用于线程同步下面是一些他们的异同点1.当多个线程在等待一个 AutoResetEvent的时候,每次调用AutoResetEvent.Set()方法只会唤醒一个线程2.当多个线程在等待一个ManualResetEvent的时候,每次调用ManualResetEvent.Set()方法会唤醒所有等待的线程3.当多个线程在等待一个Semaphore的时候,每次调用Semaphore.R... 阅读全文

posted @ 2010-11-18 14:29 听说读写 阅读(639) 评论(0) 推荐(0) 编辑

CLR via C# 读书笔记 3-1 一种单实例应用程序的实现(信号量)

摘要: 单实例应用程序指的是在你的操作系统中你只能开一个的程序例如说outlook以下代码通过 Semaphore 实行了一个单实例的控制(事实上你使用EventWaitHandle 或者 Mutex都是可以的)原理是因为windows不允许重名的核心对象 ,例子中是 "SomeUniqueStringIdentifyingMyApp"第一次调用Semaphore的时候,系统将创建一个对象并将create... 阅读全文

posted @ 2010-11-18 14:07 听说读写 阅读(452) 评论(0) 推荐(0) 编辑

2010年11月15日

CLR via C# 读书笔记 2-1 编译器优化导致的问题

摘要: DotNet项目在Debug 和Release 模式一个主要的差别就是有没有打开编译器优化在release下由于采用了编辑器优化,那么原来有些运行正常的代码就会出问题下面一段代码就是这样[代码]在Debug模式编译运行 你会发现程序正常的结束了在Release模式编译运行 你会发现程序进入了死循环 , 在while 那条语句这是由于编译器在优化模式下会认为s_stopWorker是一个常量(非tr... 阅读全文

posted @ 2010-11-15 19:51 听说读写 阅读(391) 评论(1) 推荐(0) 编辑

有趣的面试题 1-1 单向链表

摘要: 已知内存中存在一个单向链表,表示方法为 1 2 3 .... n现在只给你一个 节点m , 只知道节点m一定在这个单向链表上要求是删除节点m不知道单向链表的起点在哪里常规思路,是找到m的前一个节点 m-1,然后将 m-1 指向m的下一个数据 m+1 ,但是这里的问题是, 这是一个单向链表,根据m根本无法查到 m-1所以要换一种思路思考所谓的删除操作可以换一种方式来做,知道m 那么就知道m+1 m+2....n那么将m+1的值拷贝到 m ,将m的下一个元素指向m+2那么在内容上就删除了m这个节点当然这个删除是不完美的他最大的难度是要开阔你的思路,不要老是局限于已经有的知识,先尝试解决问题,再解决 阅读全文

posted @ 2010-11-15 14:06 听说读写 阅读(582) 评论(3) 推荐(1) 编辑

2010年11月12日

c# 使用 new 操作符构造新对象中做了一些什么 (简单版)

摘要: 平时new算是使用非常频繁的一个关键字这里只是描述 new object() 这种类型的作用其他的暂时不涉及到,本文的内容也比较简单,就列出了一些常用的流程1.在第一次访问某个程序集的时候 (会加载对应的程序,例如需要new的对象在其他的dll里面)  其实步骤一中有很多其他的内容,不过这里就不详细描述了,因为用的比较少  如果找不到dll这个时候就会抛出异常2.给所有静态成员赋值(static)... 阅读全文

posted @ 2010-11-12 20:08 听说读写 阅读(849) 评论(3) 推荐(0) 编辑

常见的.net误解 1-1 字符串是不可修改的(immutable)

摘要: 总是很在很多资料或者文章上介绍.net的字符串是不可以修改的(immutable)先来看看什么是字符串  在.net里面字符串是一个引用类型,但是有很多值类型的特征  例如比较两个字符串,实际上比较的是两个的内容,而不是引用地址 ,(这里涉及到一个概念就是字符串驻留技术)然后我们看看为什么经常有人说字符串是不可以修改的  因为字符串有以下特性:当你对字符串执行 + , Substring 等操... 阅读全文

posted @ 2010-11-12 17:29 听说读写 阅读(1607) 评论(7) 推荐(0) 编辑

CLR via C# 读书笔记 1-3 前台线程和后台线程

摘要: 前台线程(Foreground)后台线程(Background)相互作用:  当所有前台线程退出的时候, CLR会强制终止所有的后台线程,并且不会有异常抛出请参考以下代码(摘自CLR via C# ):代码转换  你可以在任何时候转换前台线程为后台线程,或者反过来. 只要线程还活着默认值:  主线程默认是前台线程  线程池默认是后台线程  新建的默认是后台线程何时使用?  非关键性事务或者可恢复性... 阅读全文

posted @ 2010-11-12 16:43 听说读写 阅读(505) 评论(0) 推荐(0) 编辑

CLR via C# 读书笔记 1-2 创建线程的成本

摘要: 在clr中创建线程的代价还是比较高的 ,他需要两个部分内存:线程核心对象, 存放描述线程的一些内容和上下文. (内存消耗:700B-2500B)线程环境,存放例如异常处理链之类. (内存消耗 1Page 4k-8k)用户模式堆栈, 存放 参数 变量等 ,这也就是平时我们说的堆栈和堆的区别中的堆栈 (内存消耗:1MB)核心模式堆栈, (内存消耗12KB-24KB)基本上看来好像就消耗了1MB多一些的... 阅读全文

posted @ 2010-11-12 15:55 听说读写 阅读(2880) 评论(0) 推荐(0) 编辑

CLR via C# 读书笔记 1-1 何时使用线程或者线程池

摘要: 一般来说在尽可能的情况下使用线程池 除了以下的4个情况需要手动控制线程运行在非默认的优先级上(不推荐)需要表现为前台线程需要长时间的运行一个任务想要手动控制一个线程的生命周期(例如Abort)-------------------------------其实我觉得还有两个重要的方面线程池是全局共享的,也就是说一个程序往线程池里面塞入一些任务 ,那么必然会影响到其他人极端的情况,就是你占用了所有的线... 阅读全文

posted @ 2010-11-12 15:38 听说读写 阅读(450) 评论(0) 推荐(0) 编辑

上一页 1 ··· 7 8 9 10 11

导航