11 2010 档案

net异步操作总结和比较
摘要:以下是个人理解:Compute 主要指的是CPU密集型或者是其他计算密集型的操作I/O 这里指的是操作文件或者网络等适用的异步情况父子依赖指的是 一个任务是不是依赖于其他任务的状态而执行(例如A任务完成取消或者异常的时候 B任务执行)取消: 一个任务开始以后是否能够被终止等待:能否block住当前线程以等待异步操作的完成(是否有内置功能支持)超时:能否对异步任务设置超时时间返回值和异常:能否处理异步任务的返回值和异常(是否有内置功能支持)异步方式主要应用Emulate Secondaryvia What?父子依赖关系进度报告取消等待超时返回值和异常QueueUserWorkItemComput 阅读全文

posted @ 2010-11-30 13:51 听说读写 阅读(650) 评论(0) 推荐(0) 编辑

CLR via C# 读书笔记 3-6 比较APM和EAP(异步编程模型和基于事件的编程模式)
摘要:APM: The Asynchronous Programming Model (异步编程模型) BeginXXXEAP: The Event-Base Asynchronous Pattern (基于事件的编程模式) Button.Click+=........EPM: The Event-Base Programming Model 1.本质上EAP内部也是使用了APM,只是EAP做了一些封装... 阅读全文

posted @ 2010-11-30 12:47 听说读写 阅读(850) 评论(0) 推荐(0) 编辑

CLR via C# 读书笔记 2-3 Cache Lines and False Sharing(高速缓冲区和错误共享???)
摘要:因为水平有限 不知道怎么用中文表达Cache Lines 和 False Sharing (暂时把他们翻译为 高速缓冲区和错误共享,如有谬误,还请有识之士指正)现在的cpu 一般拥有多个核心和一个cpu内的缓存(一般是L2?)这些缓存一般位于cpu芯片内, 他的速度远远高于主板上的内存,一般来说cpu会把数据从内存加载到缓存中 ,这样可以获得更好的性能(特别是频繁使用的数据)这个高速缓存默认划分... 阅读全文

posted @ 2010-11-25 12:10 听说读写 阅读(1469) 评论(1) 推荐(1) 编辑

CLR via C# 读书笔记 2-2 编译器优化导致的问题 - Timer
摘要:DotNet项目在Debug 和Release 模式一个主要的差别就是有没有打开编译器优化在Release下由于采用了编辑器优化,那么原来有些运行正常的代码就会出问题下列代码, 系统觉得Timer已经没有用了...所以就被回收了..所以在Release模式下 timer只会执行一次 (注意如果是Debug模式那么一直运行)(注意如果使用Visual Studio的调试器, vs会帮你延长临时变量的... 阅读全文

posted @ 2010-11-24 14:50 听说读写 阅读(417) 评论(1) 推荐(1) 编辑

CLR via C# 读书笔记 3-5 .net framework4.0 新增类 Task(一种很好的异步模型)
摘要:Task 是在.net framework 4.0中提供的新功能主要用于异步操作的控制在很多时候他比Thread和ThreadPool提供更为强大的功能,并且更方便使用1.demo以下代码是使用Task的一个demo代码Sum是一个声明好的外部函数, 当然我们也可以使用lambda来替代它这几句代码声明了一个Task 并且调用Start方法启动他,然后使用Wait方法等待这个异步任务的完成2.Ta... 阅读全文

posted @ 2010-11-24 14:16 听说读写 阅读(2769) 评论(0) 推荐(0) 编辑

CLR via C# 读书笔记 3-4 锁-条件变量模式
摘要:条件变量模式(The Condition variable Pattern)指的是一个任务在等待一个变量的状态.(例如一个线程当变量为true的时候执行,否则就一直在休眠状态)以下代码演示了Thread1 一直在等待m_condition的状态Thread1在等待状态改变的过程中,间歇性的暂时释放锁的控制权这样Thread2就有机会获得到锁,改变m_condition的状态,并且执行Pulse(A... 阅读全文

posted @ 2010-11-23 18:06 听说读写 阅读(1883) 评论(0) 推荐(0) 编辑

CLR via C# 读书笔记 3-3 Thread.Sleep -1 0 1 和其他
摘要:Thread.Sleep(-1)通知系统不要调度该线程,事实上这个方法没什么用,因为它让线程一直活着又什么都不做,建议是直接终结了现场Thread.Sleep(0)告诉系统当前线程不需要剩下的时间片了,请系统去调度其他的线程但是系统经过计划以后有可能还是觉得当前线程比较重要,又继续执行当前线程这取决于优先级,如果其他优先级都比当前优先级低的话,那么当前线程会继续Thread.Sleep(1)强制上... 阅读全文

posted @ 2010-11-19 17:20 听说读写 阅读(950) 评论(0) 推荐(0) 编辑

C# 使用lock关键字lock不同的对象
摘要:c# lock关键字的本质是调用Monitor.Enter(object obj)并且在finally的时候调用Monitor.Exit(obj)在obj是不同数据类型的时候会出现不同的情况1.锁定类型 例如lock(typeof(int)) lock(typeof(ClassA)) // CalssA 是一个类的定义  备注:前者作用范围跨AppDomain 不跨Process, 后者不跨App... 阅读全文

posted @ 2010-11-19 16:02 听说读写 阅读(7037) 评论(0) 推荐(2) 编辑

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 听说读写 阅读(640) 评论(0) 推荐(0) 编辑

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

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

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

posted @ 2010-11-15 19:51 听说读写 阅读(394) 评论(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 听说读写 阅读(588) 评论(3) 推荐(1) 编辑

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

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

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

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

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

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

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

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

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

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

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示