摘要: 线程在C#中有5个优先级:Highest、AboveNormal、Normal、BelowNormal和Lowest。讲到线程的优先级,就 会涉及线程的调度。Windows系统是一个基于优先级的抢占式调度系统。在系统中,如果有一个线程的优先级较高,并且它正好处在就绪状态,系统总是会优 先运行该线程。换句话说,高优先级的线程总是在系统调度算法中获取更多的CPU执行时间。 我们可以在一个单CPU系统中测试下面的代码:staticvoidMain(string[]args) { longt1Num=0; longt2Num=0; CancellationTokenSourcects=newCance 阅读全文
posted @ 2012-04-19 11:39 ChaunceyHao 阅读(139) 评论(0) 推荐(0)
摘要: LINQ最基本的功能就是对集合进行遍历查询,并在此基础上对元素进行操作。仔细推敲会发现,并行编程简直就是专门为这一类应用准备的。因此,微软 专门为LINQ拓展了一个类ParallelEnumerable(该类型也在命名空间System.Linq中),它所提供的扩展方法会让LINQ支持 并行计算,这就是所谓的PLINQ。 传统的LINQ计算是单线程的,PLINQ则是并发的、多线程的,我们通过下面这个示例就可以看出这个区别:staticvoidMain(string[]args) { List<int>intList=newList<int>(){0,1,2,3,4,5,6 阅读全文
posted @ 2012-04-19 11:38 ChaunceyHao 阅读(215) 评论(0) 推荐(0)
摘要: 使用线程能极大地提升用户体验度,但是作为开发者应该注意到,线程的开销是很大的。 线程的空间开销来自: 1)线程内核对象(Thread Kernel Object)。每个线程都会创建一个这样的对象,它主要包含线程上下文信息,在32位系统中,它所占用的内存在700字节左右。 2)线程环境块(Thread Environment Block)。TEB包括线程的异常处理链,32位系统中占用4KB内存。 3)用户模式栈(User Mode Stack),即线程栈。线程栈用于保存方法的参数、局部变量和返回值。每个线程栈占用1024KB的内存。要用完这些内存很简单,写一个不能结束的递归 方法,让方法参数和. 阅读全文
posted @ 2012-04-19 11:37 ChaunceyHao 阅读(448) 评论(0) 推荐(0)
摘要: 定义 基于状态的测试(也称状态验证),是指在方法执行之后,通过检查被测系统及其协作者(依赖项)的状态来检测该方法是否正确工作。 让我们来看一个基于状态测试的简单例子,它使用LogAnalyzer类,然而,我们不能简单地调用一个方法就完成测试。代码清单2.3给出了该类的代码。 代码清单2.3 通过调用IsValidLogFileName来测试属性的值publicclassLogAnalyzer { privateboolwasLastFileNameValid; publicboolWasLastFileNameValid { get{returnwasLastFileNameValid;} s 阅读全文
posted @ 2012-04-19 11:34 ChaunceyHao 阅读(202) 评论(0) 推荐(0)
摘要: 如果实在不想为测试添加一个公开的构造函数,可以使用内部(internal)构造函数。有了[InternalsVisibleTo],这些内部类成员和方法对测试程序集是可见的。代码清单3.9给出了详细的例子。 代码清单3.9 让内部成员对测试程序集可见publicclassLogAnalyzer { ... internalLogAnalyzer(IExtensionManagerextentionMgr) { manager=extentionMgr; } ... } UsingSystem.Runtime.CompilerServices; [assembly:InternalsVisible 阅读全文
posted @ 2012-04-19 11:33 ChaunceyHao 阅读(308) 评论(0) 推荐(0)
摘要: "任何面向对象的问题都可以通过添加一个间接层来解决,除非有太多的间接层。"我很喜欢这个观点(引自我的一个朋友),因为单元测试中的很多种"艺术"就是找到一个正确的地方,添加或者使用一个间接层,以此来测试代码。 有些代码无法测试吗?那么添加一个层来封装对这些代码的调用,然后在测试中模拟这个层,或者使这些代码变得可替换(这样其本身就是一个间接层)。当 然,这种艺术也包括避免重复新建一个已经存在的间接层,也包括当这种做法使事情变得过于复杂时,停止使用它。不过,让我们一步步来。 事实上,测试这段代码的唯一途径,是在文件系统中建立一个配置文件。因为我们正尝试着避免这 阅读全文
posted @ 2012-04-19 11:32 ChaunceyHao 阅读(252) 评论(0) 推荐(0)
摘要: OpenGL是一个允许程序员发送指令到图形卡的库。图形卡是一种专用于显示3D数据的硬件,由很多标准组件构成,包括帧缓冲区、纹理内存和 GPU。GPU是图形处理单元(Graphics Processing Unit)的缩写,它控制着如何处理顶点并把它们显示到屏幕上。CPU向GPU发送指令和数据,描述每一帧应该怎样显示到屏幕上。纹理内存通常是一块较大 的内存,用于存储游戏所需的大量纹理。帧缓冲区是内存中的一块区域,存储下一帧中将显示到屏幕上的图像。现代的图形卡通常有多个GPU,每个GPU上都有 许多着色器处理单元来执行大规模的并行着色器操作。分布式应用程序(如模拟蛋白质折叠的Folding@ho. 阅读全文
posted @ 2012-04-19 11:30 ChaunceyHao 阅读(288) 评论(0) 推荐(0)
摘要: 每台计算机都有专门处理图形的硬件,它们控制着屏幕上显示的内容。OpenGL向这种硬件发出命令,告诉它们执行什么操作。计算机游戏或者其他任意软件借助制造商提供的设备驱动程序,使用OpenGL向图形硬件发出命令,如图2-1所示。 图2-1 OpenGL的典型应用 OpenGL(Open Graphics Library,开放图形库)是游戏开发商使用最早、最流行的图形库之一。OpenGL是Silicon Graphics公司(SGI)在1992年开发的,但是直到1997的GLQuake中采用了这种图形库以后,游戏开发商才真正对它产生了兴趣。 GameCube、Wii、PlayStati... 阅读全文
posted @ 2012-04-19 11:09 ChaunceyHao 阅读(451) 评论(0) 推荐(0)
摘要: 怎样使窗体中的控件布局统一? 问题阐述 为了使界面更美观,怎样可以让窗体中的控件统一布局? 专家解答 在程序开发领域中,.NET无疑是未来的发展主流,然而在开发软件时,对于开发人员来说,界面排版和代码编写同等重要,界面的好坏直接影响到软件的外观和易用性。开发程序时,可以通过"格式"菜单来布局窗体上的控件。 解决此问题的步骤如下: (1)打开Visual Studio 2010开发环境,新建一个Windows窗体应用程序,并将其命名为LayoutForm。 (2)在默认窗体Form1中添加3个Button控件。 (3)在Form1窗体中选中添加的3个Button控件,在菜单栏 阅读全文
posted @ 2012-04-19 11:07 ChaunceyHao 阅读(290) 评论(0) 推荐(0)
摘要: CTS、CLS和CLR分别作何解释? 问题阐述 CTS、CLS和CLR分别是什么意思? 专家解答 CTS、CLS和CLR是.NET框架的3个核心部分,下面分别对它们进行介绍。 (1)CTS CTS即通用类型系统,它定义了如何在.NET Framework运行库中声明、使用和管理类型,同时也是.NET Framework运行库支持跨语言集成的一个重要组成部分。通用类型系统主要执行以下功能: 建立一个支持跨语言集成、类型安全和高性能代码执行的框架。 提供一个支持完整实现多种编程语言的面向对象的模型。 定义各语言必须遵守的规则,有助于确保用不同语言编写的对象能够发生交互 作用。 .NET Frame 阅读全文
posted @ 2012-04-19 11:06 ChaunceyHao 阅读(1579) 评论(0) 推荐(0)
摘要: 不同的浏览器中支持的事件不仅不同,而且发生顺序也有差异。详细差异已经在下面的系列表格(表5-7~表5-10)中列出。将来随着浏览器版本的升级有可能发生变化。另外,进行以下测试时没有设置autobuffer属性。 表5-7 视频导入时发生的事件及顺序(本地) 续表 表5-8 视频导入时发生的事件及顺序(服务器) 表5-9 视频播放时发生的事件及顺序(本地) 表5-10 视频播放时发生的事件及顺序(服务器) 注意: (1)数据在服务器上时,Safari 4/5保存相同的顺序。 (2)iPad上不能进行本地测试,只进行了服务器上的测试。 (3)iPad上不能进行本... 阅读全文
posted @ 2012-04-19 11:02 ChaunceyHao 阅读(188) 评论(0) 推荐(0)
摘要: 在Command(命令)模式中,使用对象来表示和封装稍后调用该方法所需的全部信息——这些信息包括方法名、拥有该方法的对象、及参数值。在系列文章“.NET中的Command(命令)模式”的第一部分中,Eric Vogel介绍了在WPF应用程序上下文中对ICommand接口的使用。 Command(命令)通常是指某个操作,及知道如何执行此操作的命令对象。那些命令对象本身会实现通用接口——调用者无需知道任何实现细节,只需通过此接口即可调用方法。这有助于将调用该操作的对象与知道如何执行此操作的对象相分离,从而带来清晰的关注点分离。 在Silverlight或WPF应用程序中使用ICom... 阅读全文
posted @ 2012-04-19 08:23 ChaunceyHao 阅读(282) 评论(0) 推荐(0)