.NET框架程序设计(修订版)-- 笔记(五)

第Ⅴ部分 类型管理

第十八章 异常

异常处理带来的好处:

利用异常处理,我们可以将资源清理代码放在一个固定的位置,并且确保它们得到执行。

利用异常处理,我们可以将处理异常的代码放在一个集中的位置。

利用异常处理,我们可以很容易定位和修复代码中的BUG

18.1异常处理的演化

18.2异常处理机制

18.2.1try

包含的通常是一些需要资源清理或者异常恢复的操作,可能会抛出异常的代码。单独一个try块没有任何意义。

18.2.2catch

包含的是出现异常时需要执行的响应代码。如果try块没有抛出异常将不会执行。出现在catch关键字后的表达式被称作异常筛选器(exception fukter),表示开发人员预料到的、并且可以从中恢复的一种异常情况,必须是System.Exception或其子类。多个catch是自上而下搜索的。在finally之后才会执行finally块的代码,有三种选择:①重新抛出所捕获的异常。②抛出一个不同的异常。③让线程从catch块的底部退出。

18.2.3finally

一般是执行资源清理工作。

18.3异常的本质

异常是对程序接口隐含假设的一种违反。

18.4System.Exception

P.40717.1System.Exception类型的属性

18.5FCL定义的异常类

P.408-P.409

18.6定义自己的异常类

应该是可序列化的,并实现及调用父类的公有构造参数。

18.7如何正确使用异常

18.7.1避免过多的finally

使用lockusing语句,使编译器自动产生try块和finally块。

18.7.2避免捕获所有异常

18.7.3从异常中顺利地恢复

18.7.4当异常无法修复时,回滚部分完成的操作

18.7.5隐藏实现细节

18.8FCL中存在的一些问题

18.9性能考虑

18.10捕获筛选器

捕获筛选器就是一个数据类型,会判断抛出的异常类型是否和筛选器指定的类型相匹配。CLR支持复杂的筛选器,但许多语言不支持。CLR会先查找接受被抛出异常的捕获筛选器,然后调用更低层次的堆栈中的Finally块来展开调用堆栈,最后才会执行匹配的catch中的代码。

18.11未处理异常

18.11.1发生未处理异常时的CLR行为控制

18.11.2未处理异常与Windows窗体

18.11.3未处理异常与ASP.NET Web窗体

18.11.4未处理异常与ASP.NET XML Web服务

18.12异常堆栈踪迹

18.12.1远程堆栈踪迹

18.13异常调试

18.13.1告诉Visual Studio调试何种代码

第十九章 自动内存管理(垃圾收集)

19.1垃圾收集平台基本原理解析

访问一个资源的步骤:

调用中间语言(IL)中的newobj指令,为某个特定资源的类型实例分配内存空间。

初始化上一步所得的内存。

通过访问类型成员来使用资源。

销毁资源状态。

释放内存。

19.2垃圾收集算法

19.3终止化操作

尽量避免使用Finalize方法,增加内存压力,分配时间较长,损伤应用程序性能,可能引用其他对象延长他们的生存期,无法很好控制Finalize方法何时执行,CLR不对Finalize方法的执行顺序做任何保证。

19.3.1调用Finalize方法的条件

①第0代对象充满

②显示调用System.GC的静态方法Collect

CLR卸载应用程序域

CLR被关闭

19.3.2终止化操作的内部机理

19.4Dispose模式:强制对象清理资源

19.4.1使用实现了Dispose模式的类型

19.4.2C#using语句

19.4.3一个有趣的依赖问题

19.5弱引用

19.5.1弱引用的内部机理

19.6对象复苏

19.6.1利用复苏设计一个对象池

19.7对象的代龄

19.8编程控制垃圾收集器

19.9其他一些与垃圾收集器性能相关的问题

19.9.1省却同步控制的多线程分配

19.9.2可扩展并行收集

19.9.3并发收集

19.9.4大尺寸对象

19.10监视垃圾收集

第二十章 CLR寄宿、应用程序域、反射

20.1元数据:.NET框架的基石

20.2CLR寄宿

任何Windows应用程序都可以寄宿CLR

20.3应用程序域

是一组程序集的一个逻辑容器。特点:

应用程序域之间是相互隔离的。

引用程序域可以被卸载。

应用程序域可以单独实施安全策略和配置策略。

包括:ApplicationName,ApplicationBase,PrivateBinPath,ConfiguationFile,LoaderOptimization

20.3.1跨越应用程序域边界访问对象

20.3.2应用程序域事件

20.3.3应用程序及其如何寄宿CLR和管理应用程序域

20.3.4Yukon:Sql Server的下一个版本代号

20.4反射概要

20.5反射一个程序集中的类型

20.6反射一个应用程序域中的程序集

20.7反射一个类型的成员:绑定

20.8显式加载程序集

20.8.1将程序集象“数据文件”一样加载

20.8.2建立一个异常类型的层次结构

20.9显式卸载程序集:卸载应用程序域

20.10获取一个System.Type对象的引用

20.11反射一个类型的成员

20.11.1创建一个类型的实例

20.11.2调用一个类型的方法

20.11.3一次绑定、多次调用

20.12反射一个类型的接口

20.13反射的性能

避免使用反射来访问类型成员,访问速度较慢,动态的定位及构造类型请遵循:

让类型继承自一个编译时已经确定的基类型。

让类型实现一个编译时已经确定的接口类型。

让类型实现的方法的名称和圆形匹配一个编译时已经确定的委托类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值