随笔分类 - .NET Framework
.NET Framework相关
摘要:前几天在网上闲逛,无意中看到有这么一道题及其答案,如下: 根据线程安全的相关知识,分析以下代码,当调用test方法时i>10时是否会引起死锁?并简要说明理由。[代码] 答:不会发生死锁,(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果把int换做一个object,那么死锁会发生) 当我看到这道题时,我心里只有两个答案,1、会发生死锁,2、不会。^_^...
阅读全文
摘要:随着本月12号VS2010的正式发布,相信越来越多的人都会把开发工具升级到VS2010。同时,相信很多人都会用到C# 4.0提供的新功能-动态绑定。我们知道,动态绑定在.NET Framework 4.0里通过一个叫做DLR的来执行的。那么它是怎样实现的呢?请看下面一段代码:[代码] 这个方法代表可以处理所有数值类型的dynamic版本。首先,我们把这个方法编译,然后通过Reflector(版...
阅读全文
摘要:早在2001年的时候,IBM就推出了在一个CPU上集成两个运算核心的服务器,但桌面双核的到来却是2005年4月18号,Intel发布了其历史上第一颗双核CPU-奔腾至尊版840,从此,千千万万的普通用户也进入了多核时代。随着多核的到来,以前随CPU频率的提高而带来的性能提升已经成为历史,软件开发人员必须去面对多核编程,而其中绕不过的一个中心就是多线程。本文围绕Windows平台展开,讨论.NET所...
阅读全文
摘要:随着 .NET 4.0的到来,她与以前各版本的一个明显差别就是并行功能的增强,以此来适应这个多核的世界。于是引入了一个新概念---任务,作为支持并行运算的重要组成部分,同时,也作为对线程池的一个补充和完善。从所周知,使用线程池有两个明显的缺点,那就是一旦把我们要执行的任务放进去后,什么时候执行完成,以及执行完成后需要返回值,我们都无法通过内置的方式而得知。由于任务(Task)的推出,使得我们对并行...
阅读全文
摘要:用过.NET线程池的程序员都知道通过调用ThreadPool类的QueueUserWorkItem方法把要执行的代码放入线程池去执行。由于.NET FCL的强大,使得这个操作极其简便。但使用线程池有个明显的不足之处,那就是我们无法获取线程池执行方法的返回值,因为WaitCallback委托的返回值为void。注:WaitCallback委托的原型为:public delegate void Wai...
阅读全文
摘要:刚装了VS2010RC版,体验一下.NET4.0线程池新增的Cooperative Cancellation模式。 用过.NET线程池的人都知道,一旦把要执行的代码交给线程池去执行后,我们基本上就失去了代码在运行中的控制能力。比如,我们想在某个时刻取消这段代码的执行,就得另想一个办法。随着.NET4.0到来,这个问题得到了解决。.NET4.0引入了一种新的设计模式---合作取消模式(Cooper...
阅读全文