摘要: APM是.NET中异步编程模型的缩写(Asynchronous Programing Model)。通过异步编程,使得我们的程序可以更加高效的利用系统资源。主要内容:一个APM的例子GUI中的APMAPM的优劣点AMP使用中的注意事项1. 一个APM的例子.Net中的异步模型非常完善,只要看到Begin***者End***方法。基本都是相对***方法的异步调用方式。(注:***是方法的名称)所以在.Net中实现一个异步调用是很方便的,下面用个小例子来演示一个异步操作。首先是同步的方式请求百度搜索10次。(分别搜索1,2,3。。。。10)public class CLRviaCSharp_21{ 阅读全文
posted @ 2011-11-29 16:22 wang_yb 阅读(2020) 评论(1) 推荐(2) 编辑
摘要: 计时器在很多应用场景中广泛应用,System.Threading命名空间下,有个Timer类可以完成计时器的操作。下面来讨论下Timer类的使用及多个CPU内核同时运行线程时如何共享高速缓存(cache)的。主要内容:计时器的使用CPU高速缓存的伪共享1. 计时器的使用1.1 计时器的创建及改变设置计时器创建的API都类似,有以下5种:public Timer(TimerCallback callback);public Timer(TimerCallback callback, object state, int dueTime, int period);public Timer(Timer 阅读全文
posted @ 2011-11-11 15:01 wang_yb 阅读(821) 评论(0) 推荐(0) 编辑
摘要: 除了上篇中提到的线程池,本篇介绍一种新的实现异步操作的方法--任务(Task)。主要内容:任务的介绍任务的基本应用子任务和任务工厂任务调度器并行任务Parallel1. 任务的介绍利用ThreadPool的QueueUserWorkItem方法建立的异步操作存在一些限制:异步操作没有返回值没有内建的机制来通知异步操作什么时候完成而使用任务(Task)来建立异步操作可以克服上述限制,同时还解决了其他一些问题。任务(Task)对象和线程池相比,多了很多状态字段和方法,便于更好的控制任务(Task)的运行。当然,任务(Task)提供大量的功能也是有代价的,意味着更多的内存消耗。所以在实际使用中,如果 阅读全文
posted @ 2011-11-10 17:38 wang_yb 阅读(1623) 评论(0) 推荐(1) 编辑
摘要: 利用线程池可以对线程进行有效的控制,使得线程能够更好的协作。在我们实际使用线程时,应当尽量使用线程池来构造线程,避免直接new一个线程。主要内容:控制资源消耗提高线程性能取消运行中的线程1. 控制资源消耗线程池(ThreadPool)启动线程的方法很简单,和上一篇直接new一个线程类似,也有带参数和不带参数两种。public static bool QueueUserWorkItem(WaitCallback callBack);public static bool QueueUserWorkItem(WaitCallback callBack, object state);其中的WaitCa 阅读全文
posted @ 2011-11-07 16:39 wang_yb 阅读(1033) 评论(1) 推荐(1) 编辑
摘要: 最近项目中要用到线程相关的知识,所以先看了本书后面线程的内容,并做了一些总结。主要内容:线程开销线程的创建前台和后台线程1. 线程开销1.1 线程的概念如果没有线程,当应用程序出现死循环时,应用程序所在的进程会一直占据CPU,导致"死机"的现象。那么线程是如何避免这种"死机"现象,使得应用程序能更好的响应用户的请求呢?Windows系统中引入了线程的概念后,每个进程至少有一个专有线程(相当于这个进程专用的CPU),系统已线程为单位分配CPU时间片,如果一个应用程序进入无限循环,那么它的专有线程会"死机"。但是其它进程的专有线程不会&q 阅读全文
posted @ 2011-10-28 16:17 wang_yb 阅读(756) 评论(0) 推荐(0) 编辑
摘要: .Net中的字符串是被谈论最多的话题,这里也进行一些总结,供以后参考。主要内容:字符串的不可变性和字符串留用语言文化格式化器1. 字符串的不可变性和字符串留用字符串(string)在.Net中是一个特殊的类。.Net中的字符串是不可变的(immutable)。也就是说,字符串已经创建就不能更改,变长,变短,修改字符都不行。对字符串进行的任何操作都不能改变原字符串,只会生成新的字符串。由于String是不可变的,我们在使用大量的字符串拼接的时候不宜使用 【+】运算符,比如"A" + "B" + "C"而是可以使用StringBuilde 阅读全文
posted @ 2011-10-21 17:05 wang_yb 阅读(681) 评论(0) 推荐(0) 编辑
摘要: 由于项目需要测试windows下的IO性能,因此要写个小程序,按照要求读取磁盘上的文件。在读取文件的时候,测试Windows的IO性能。主要内容:程序的要求一般的FileStream方式利用kernel32.dll中的CreateFile函数1. 程序的要求程序的要求很简单。(1)命令行程序(2)有3个参数,读取的文件名,一次读取buffer size,读取的次数count(3)如果读取次数count未到,文件已经读完,就再次从头读取文件。使用格式如下:C:\>****.exe “c:\****.bin” 32768 32768读取文件“c:\****.bin”,每次读取4K,读取327 阅读全文
posted @ 2011-09-06 15:47 wang_yb 阅读(3816) 评论(0) 推荐(0) 编辑
摘要: Javascript跨域调用的问题折腾了我好几天,主要参考了博客园大牛jillzhang的两篇博客ExtJs与WCF之间的跨域访问再说ExtJs与WCF之间的跨域访问博客中没有提供工程源码下载,我把其中的代码拷下来运行,extjs部分始终取不到数据。可能Extjs4和WCF都有了一些变化,而这两篇博客比较老,所以运行不了。经过一些修改(主要是加了WCF配置文件的部分),终于可以运行下面这个Grid分页的例子了。1. Extjs4 部分的代码主要有2部分:一部分是html,一部分是jshtml部分代码<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 阅读全文
posted @ 2011-08-30 22:56 wang_yb 阅读(2176) 评论(0) 推荐(0) 编辑
摘要: 关于AOP的介绍,园子里曾经有段时间非常热。我也看了很多AOP相关的文章,对AOP的概念有一定的了解,觉得园子里的大牛张逸的AOP介绍很不错:AOP技术基础看了很多AOP的介绍之后,很想自己实现一个简单的AOP来感受一下,但是一直苦于不知道怎么实现。后来看了园子里的一个介绍Emit的系列(Emit学习系列文章导航),才开始在原作者的基础上实现了简单的AOP框架,仅供学习使用。1. ThinAOP的介绍此框架非常简单,只有几个文件。但是就是因为简单,所以可以用来学习AOP的思想。由于主要部分是有Emit实现的,所以没有Emit基础的话,最好先看一下Emit学习系列文章导航具体结构如下:2. Th 阅读全文
posted @ 2011-08-10 10:57 wang_yb 阅读(4512) 评论(9) 推荐(3) 编辑
摘要: 接口(interface)和类(class)是CLR中应用最为广泛的两个概念。灵活的应用接口,可以构造出各种经典的设计模式。接口的语法并不复杂,本篇主要记录接口中一些容易忽略的地方,以及如何更好的使用接口。主要内容:接口的继承显式接口泛型接口和约束接口和抽象类1. 接口的继承当子类继承父类后,父类继承的接口也一并继承了过来。如下例中的类Sub当子类继承父类后,子类可以再次继承父类已经继承的接口。如下例中的类Sub2这两者的区别在对接口方法调用,参见下面代码中的注释。using System;sealed class CLRviaCSharp_15{ static void Main(strin 阅读全文
posted @ 2011-07-28 17:03 wang_yb 阅读(679) 评论(0) 推荐(0) 编辑