03 2014 档案

摘要:一、CLR线程池基础 前面说过,创建和销毁线程是一个比较昂贵的操作,太多的线程也会浪费内存资源。由于操作系统必须调度可运行的线程并执行上下文切换,所以太多的线程还有损于性能。为了改善这个情况,CLR使用了代码来管理它自己的线程池。可将线程池想像成可由你的应用程序使用的一个线程集合。每个进程都有一个线程池,它在各个应用程序域(AppDomain)是共享的. CLR初始化时,线程池是没有线程的。在内部,线程池维护了一个操作请求队列。应用程序想执行一个异步操作时,就调用某个方法,将一个记录项(entry)追加到线程池的队列中。线程池的代码从这个队列中提取记录项,将这个记录项派遣(dispat... 阅读全文
posted @ 2014-03-27 19:49 烧点饭 阅读(2228) 评论(0) 推荐(2) 编辑
摘要:一、Windows为什么要支持线程 Microsoft设计OS内核时,他们决定在一个进程(process)中运行应用程序的每个实例。进程不过是应用程序的一个实例要使用的资源的一个集合。每个进程都赋予了一个虚拟地址空间,确保一个进程使用的代码和数据无法由另一个进行访问。这样就确保了应用程序集的健壮性,因为一个进程无法破坏另一个进程里的数据和代码。另外,进程是无法访问到OS的内核代码和数据。 如果一个应用程序进入死循环时,如果只是单核的CPU的,它会无限循环执行下去,不能执行其他代码,这样会使系统停止响应。对此,Microsoft拿出的一个解决方案——线程。线程的职责就是对CPU的虚拟化。Wi.. 阅读全文
posted @ 2014-03-17 15:26 烧点饭 阅读(948) 评论(0) 推荐(0) 编辑
摘要:我们知道,一个值类型的变量永远不可能为null。它总是包含值类型本身。遗憾的是,这在某些情况下会成为问题。例如,设计一个数据库时,可将一个列定义成为一个32位的整数,并映射到FCL的Int32数据类型。但是,数据库中的一个列可能允许值为空;用Microsoft .NET Framework处理数据库可能变得相当困难,因为在CLR中,没有办法将一个Int32值表示为null。 Microsoft ADO.NET的表适配器确实支持可空类型。但遗憾的是,System.Data.SqlType命名空间中的值类型没有用可空类型替换,部分原因是类型之间没有"一对一"的对应关系。例如,S 阅读全文
posted @ 2014-03-06 13:53 烧点饭 阅读(790) 评论(0) 推荐(1) 编辑
摘要:attribute可以说是Microsoft .NET Framework提出的最具创意的技术之一了。利用attribute,可以声明性的为自己的代码构造添加注解,从而实现一些特殊的功能。attribute允许将定义的信息应用于几乎每一个元数据表的记录项。这种可扩展的元数据信息能在运行时查询,从而动态改变代码的执行方式。 一、使用attribute attribute可运用于类型和成员。Microsoft采取了一种机制提供对用户自定义的attribute的支持。这种机制叫做定制attribute。 关于自定义attribute,首先应该知道:它们只是将一些附加信息与某个目标元素关联起... 阅读全文
posted @ 2014-03-05 15:35 烧点饭 阅读(1814) 评论(0) 推荐(1) 编辑
摘要:回调函数是一种非常有用的编程机制,它已经存在很多年了。Microsoft .NET Framework通过委托(delegate)来提供一种回调机制。不同于其他平台(比如非托管C++)的回调机制,委托提供了多得多的功能。例如,委托确保回调方法是类型安全的(这是CLR最重要的目标之一)。委托还允许顺序调用多个方法,并支持调用静态方法和实例方法。一、初识委托为了理解委托,先看看如何使用它。委托4个最基本的步骤:1)定义委托类型2)有一个方法包含要执行的代码3)创建一个委托实例化(包含声明委托对象)4)执行调用(invoke)委托实例具体解释如下:1.定义委托类型委托类型就是参数类型的一个列表以.. 阅读全文
posted @ 2014-03-01 13:10 烧点饭 阅读(1436) 评论(1) 推荐(2) 编辑

点击右上角即可分享
微信分享提示