随笔分类 -  读书摘要

看完书后喜欢再翻一遍目录,一般不会发表太多见解,纯属个人习惯。
摘要: 本章讲述的是混合的线程同步模式,首先通过一个简单的例子演示了如何混合使用用户模式和核心模式的同步结构。然后说明了轮转、线程所有制、锁递归的概念。接着列举了几种混合同步结构的实例,并进行了分析比较。本章还讨论了一个非常有意思的问题:单例模式的两次检查加锁情况,给出了正确实现单例模式的方法。然后讲了什么是条件变量模式,以及如何通过使用集合、Task和线程池来避免长时间持有锁。最后简单说明了四个并发集合类。 阅读全文
posted @ 2010-07-02 14:53 bengxia 阅读(856) 评论(1) 推荐(0)
摘要: 本章讲述了原生的线程同步结构,首先介绍了类库和线程安全性概念,然后对线程同步模式进行了分类:用户模式与核心模式,接着详细说明了这两种同步模式的实现细节,并举例进行了对比。 阅读全文
posted @ 2010-07-01 10:55 bengxia 阅读(490) 评论(0) 推荐(0)
摘要: 本章详细讲述了I/O方向的异步工作如何完成,首先解释了Windows处理同步I/O和异步I/O的内部机制。然后介绍了APM,针对APM的问题还介绍了一个Wintellect的辅助类AsyncEnumerator。接着讲了APM如何处理异常,以及应用程序如何选择线程模型。演示了如何实现一个异步的服务器程序(ASP.NET WEB服务、ASP.NET窗体页面、WCF)。解释了APM还可以用于计算方向的异步操作。接着,重点解释了APM的缺点以及处理办法。然后讲述了I/O请求的优先级,以及如何讲了IAsyncResult APM转换成Task。接着还介绍了一种不太优雅的异步编程模型EAP。最后针对几种异步编程模型进行了比较。 阅读全文
posted @ 2010-06-22 15:28 bengxia 阅读(619) 评论(0) 推荐(0)
摘要: 本章讲了计算方向的异步操作问题,首先隆重推出了CLR的线程池概念,给线程池的线程划分了两个类别:工作者线程和I/O线程。然后演示了如何简单的使用线程池实现一个多线程计算操作;接着讨论了线程池的线程执行体上下文结构;然后引出了协作式取消模式以解释如何在线程池中取消操作;本章重点讨论了Task,一种使用线程池的更强大易用方法,并演示了如何等待任务完成获得结果,如何取消任务,如何在一个任务完成后自动的开始另外一个任务,如何由一个任务开始子任务。接着分析了Task的实现机制和调度策略,如何利用TaskFactory工厂模式创建任务。本章还讲述了如何使用Parallel LINQ以及它的限制和注意事项;接着还讨论了定时器的作用,比较了FCL提供的几种定时器的差异。之后简单解释了线程池是如何管理线程的。最后讨论了高速缓存行和多处理器环境下需要注意的错误共享(False Sharing)问题。 阅读全文
posted @ 2010-06-09 11:39 bengxia 阅读(471) 评论(0) 推荐(0)
摘要: 本章讲述了线程的基本知识。首先介绍了Windows的线程概念,CPU的发展趋势,CLR线程与Windows线程直接的关系。然后分析了使用线程的开销,总结了在什么情况下使用线程,使用线程时要注意哪些问题。接着讲解了NUMA的体系结构。讲述了在什么情形下需用使用确定的线程来完成异步计算密集型任务。接着给出了使用线程的理由。重点深入解释了Windows线程的调度机制,线程的优先级以及和线程优先级之间的关联。本章的结尾讲述了选择前台线程和后台线程的条件。最后还推荐了Wintellect Power Threading Library来简化异步编程和线程同步。 阅读全文
posted @ 2010-06-02 15:34 bengxia 阅读(433) 评论(0) 推荐(0)
摘要: 本章讲了序列化和反序列化的知识,序列化可以讲对象转换成流进行传输或者持久化,在需要的时候通过反序列化在将对象构造出来。首先讲了如何让类型具备序列化的能力,以及如何控制序列化的过程。然后讲了Formatter如何序列化类型实例,如何控制序列化/反序列化的数据,介绍了StreamingContext对象,演示了如何将对象反序列化到不同的类型实例。接着介绍了序列化代理,最后讲了SerializationBinder抽象类可以用来反序列化对象到不同的类型。 阅读全文
posted @ 2010-05-31 15:14 bengxia 阅读(311) 评论(0) 推荐(0)
摘要: 本章讨论了如何构建可动态扩展的应用程序,以及如何通过反射来获得类型信息,创建类型的实例,动态的访问它们的成员。首先介绍了如何加载程序集以及如何通过反射来扩展应用,然后分析了反射会引起的性能问题以及如何减轻影响,然后介绍了构建插件应用程序的途径,最后讲了如何通过反射来调用类型的成员。 阅读全文
posted @ 2010-05-24 14:45 bengxia 阅读(602) 评论(0) 推荐(0)
摘要: 本章主要讨论了两个概念:Hosting和AppDomains。Hosting允许任何应用程序利用CLR的特性;AppDomain是进程中的一个逻辑区域,一个进程可以加载多个AppDomain,一个AppDomain中可以加载多个Assembly,AppDomain还可以被卸载。AppDomain可以为插件应用程序等提供很好的隔离性和安全性。首先解释了什么是CLR Hosting,什么是AppDomain,如何加载卸载监视AppDomain,然后讲了宿主怎样使用AppDomain,最后讲了高级的宿主控制方法以及如何写出健壮的宿主应用程序。 阅读全文
posted @ 2010-05-21 15:50 bengxia 阅读(635) 评论(0) 推荐(0)
摘要: 本章的内容比较多,主题就是垃圾收集。讲述了托管应用程序如何构造对象,如何控制这些对象的生命期,这些对象占用的内存怎样回收。首先介绍了垃圾收集器的一些基本概念,然后解释了垃圾收集算法,接着讲了垃圾收集如何进行以及如何调试。重点讲了Finalization是怎么进行的,如何使用Finalizer来释放资源和SafeHandle的用法,通过继承自CriticalFinalizerObject类型来保证终止化被执行,隆重推出了Dispose模式。还介绍了C#中using的用法,如何手动的控制对象的生命期,如何复活一个对象。解释了代龄是什么,在使用本地资源时如何利用垃圾收集器的特性。还讲了如何通过使用MemoryFailPoint来提高内存敏感算法的健壮性。另外还讲了如何通过编程的方法来控制垃圾收集器运行,说明了什么是安全点(safe point)以及CLR怎样劫持线程以进行垃圾回收。最后讲了垃圾收集器的工作模式,CLR对待大对象的处理方法,以及怎样监视垃圾收集器的工作。 阅读全文
posted @ 2010-05-10 14:20 bengxia 阅读(691) 评论(0) 推荐(0)
摘要: 本章的主要内容是关于错误处理和如何增强可靠性的。首先,定义了什么是错误,强调不能用异常来做流程处理。然后,讲了如何发现错误并进行处理。解释了CLR异常处理的机制,详细讲了System.Exception基础,FCL的异常类,以及如何正确的抛出异常。还演示了如何定义自己的异常,这是一个比较单调易错的工作。接着讲了如何提高生产效率并增强可靠性,给出了使用异常的最佳实践指南。然后讲了如何对待未处理的异常,以及如何调试异常。分析了异常处理的性能问题,阐述了CER的概念和用途。最后讲解了如何使用代码契约来提供程序的鲁棒性,并推荐了一些常用的工具。 阅读全文
posted @ 2010-04-29 15:31 bengxia 阅读(328) 评论(0) 推荐(0)
摘要: 本章讲了如何使用Nullable的值类型,为什么Nullabe?其中一个理由就是与数据库内容表示的一致性。首先讲了如何使用Nullable的值类型,然后讲了??操作符,最后讲了CLR对Nullable提供了哪些特别的支持。 阅读全文
posted @ 2010-04-23 16:46 bengxia 阅读(178) 评论(0) 推荐(0)
摘要: 定制属性(Custom Attribute)是.NET框架中的一个重要革新。定制属性可以允许你以申明的方式标注代码结构。本章先讲了如何使用Attribute以及如何定义一个定制属性,然后解释了Attribute的构造器、字段、属性的数据类型限制,还演示了如何检测类型中使用的定制属性。特别说明了System.Attribute的Equals、Match的内部实现并建议用户改写这些方法以避免反射。还给出了一个不用创建继承属性对象并能检测定制属性的方法(System.Reflection.CustomAttributeData.GetCustomAttributes,最后说明了如何使用条件属性。 阅读全文
posted @ 2010-04-20 17:09 bengxia 阅读(298) 评论(0) 推荐(0)
摘要: 本章讨论委托,委托是一种类型安全的回调函数。委托可以回调静态方法或者实例方法。委托实际上继承至MulticastDelegate,委托可以链接在一起挨个调用。Action和Func是连个非常有用的泛型委托。然后介绍了在操作委托时使用一些C#的语法糖可以简化很多工作。最后演示了通过使用反射可以在运行时动态的创建委托并进行调用。 阅读全文
posted @ 2010-04-20 16:14 bengxia 阅读(303) 评论(0) 推荐(0)
摘要: 本章讲述的是数组的概念。CLR可以支持多种形式的数组。首先讲了如何初始化一个数组,然后讲了如何转换数组以及Array.Copy的用途和局限性,阐明了数组的一些潜在特性,然后讲了如何创建一个多维非零基的数组,并且比较了不同数组在访问性能上的差异,最后重点解释了不安全数组的特性和使用要点。 阅读全文
posted @ 2010-04-19 17:40 bengxia 阅读(303) 评论(0) 推荐(0)
摘要: 本章讲了枚举类型已经按位表示(Flags)的枚举类型。解释了枚举类型的工作原理,着重讲了枚举类型的几个方法以及给枚举类型使用Flags时需要注意的事项,最后讲了如果通过使用扩展方法来给枚举类型增加方法。 阅读全文
posted @ 2010-04-19 15:41 bengxia 阅读(279) 评论(0) 推荐(0)
摘要: 本章解释了在.Net中使用字符和字符串的工作机制。开始讨论了System.Char结构以及操作一个字符的不同方法,然后讲了System.String类型,注意String是不可变的,在什么情况下使用StringBuilder。在这些基础之上,还讲述了如何格式化对象ToString,以及如何高效可靠的在不同编码之间进行转换。最后演示了如何使用SecureString来安全的存储密码、信用卡等敏感信息。 阅读全文
posted @ 2010-04-13 16:46 bengxia 阅读(248) 评论(0) 推荐(0)
摘要: 本章讲述了interface和class之间的区别,示范了如何定义一个接口以及接口的继承, 解释了在调用接口时CLR的行为,说明了隐式接口实现与显示接口实现(EIMI)的区别,着重说明EIMI的用途。然后讲了如何定义泛型接口,使用泛型接口的好处,如何对泛型接口的泛型类型参数进行约束(逆变out与协变in)。还讲了如何实现不同接口的多个同名同签名的方法(使用EIMI支持)。最后对接口和基类的设计抉择给出了指导性建议。 阅读全文
posted @ 2010-04-12 15:07 bengxia 阅读(272) 评论(0) 推荐(0)
摘要: 本章讲了现代编程语言中的一个很重要的概念:泛型。泛型带来的好处:源代码保护;类型安全;更清爽的代码;更好的性能。解释了泛型(泛型类型,泛型接口,泛型委托,泛型方法)的实现机制和限制,然后介绍了如何对泛型类型进行验证和约束。 阅读全文
posted @ 2010-04-07 16:06 bengxia 阅读(276) 评论(0) 推荐(0)
摘要: 本章阐明了两种属性:无参数属性和参数化属性。 详细解释了AIP属性,匿名类型,Tuple的实现机制以及需要注意的地方。如何定义参数化的属性,以及如何重命名indexer和设置默认的indexer。对比了属性和字段的区别,以及在使用属性时的性能问题。最后讲了属性方法的访问修饰符,以及为何不能用泛型属性。 阅读全文
posted @ 2010-04-06 15:54 bengxia 阅读(325) 评论(0) 推荐(0)
摘要:本章的焦点是开发过程中会用到的各种方法,包括实例构造器、类型构造器(静态构造)、操作符重载、类型转换方法。最后讨论了扩展方法,也就是怎么在现有类型中加入方法(Decorate Pattern?) ,还有将功能的实现代码分别放在不同文件中的部分方法。 阅读全文
posted @ 2010-03-22 16:38 bengxia 阅读(242) 评论(0) 推荐(0)

无觅相关文章插件,快速提升流量