Try-Catch机制使用场景分析
(一)在什么场景下加Try-Catch机制
1)以业务逻辑功能为单位,在最上层加Try-Catch机制。为什么要这样做呢?这主要是增加程序的健壮性,防止因抛出异常过多,导致程序崩溃。
try
{ //业务逻辑功能 //......}catch (Exception ex){ //记录日志 //......}try
{ sent += sendSAEA.AcceptSocket.Send(buffer, sent, size - sent, SocketFlags.None);}catch (ObjectDisposedException ex) //Socket 已关闭{ break;}catch (SocketException ex){ //socket异常,等待后继续尝试发送 Thread.Sleep(this.socketListenerSettings.MSDelayForNextSend);}catch (Exception ex){ this.SaveLog("Send方法出错,错误描述为:" + ex.Message.ToString()); break;}try
{ //底层代码 //......}catch (Exception ex){ throw new Exception("xxx方法出错,描述:" + ex.Message.ToString());}(二)Try-Catch机制注意点
1)Try-Catch机制会将异常屏蔽掉,在解决异常时,您可以根据具体的异常执行相应的解决方案,也可以记录错误日志,用于异常追踪,还可以直接抛出自定义异常。在众多选择中,请牢记一条:必须根据具体的应用场景,具体分析。比如,我们写一个程序实现ATM机取现功能,首先,验证用户的合法性,其次,验证用户本次操作的合法性,最后,完成用户操作。我们在以上三个操作都加上Try-Catch机制,如果此时第一个操作出现异常,您如果只是记录一下日志,将此异常屏蔽掉,将会造成灾难性的后果。
2)不能滥加Try-Catch机制,Try-Catch机制在一定程度上会损耗或影响性能,建议有以下几点准则:
1.尽量给CLR一个明确的异常信息,不要使用Exception去过滤异常
2.尽量不要将try…catch写在循环中
3. try尽量少的代码,如果有必要可以使用多个catch块,并且将最有可能抛出的异常类型,书写在距离try最近的位置
4.不要只声明一个Exception对象,而不去处理它。这样做白白增加了Exception Handing Table的长度。
5.使用性能计数器实用工具的“CLR Exceptions”检测异常情况,并适当优化
6.使用成员的Try-Parse模式,如果抛出异常,那么用false代替它
Try-Catch机制使用场景分析的更多相关文章
- TYPESDK手游聚合SDK服务端设计思路与架构之一:应用场景分析
TYPESDK 服务端设计思路与架构之一:应用场景分析 作为一个渠道SDK统一接入框架,TYPESDK从一开始,所面对的需求场景就是多款游戏,通过一个统一的SDK服务端,能够同时接入几十个甚至几百个各 ...
- Java 常用List集合使用场景分析
Java 常用List集合使用场景分析 过年前的最后一篇,本章通过介绍ArrayList,LinkedList,Vector,CopyOnWriteArrayList 底层实现原理和四个集合的区别.让 ...
- Springboot学习04-默认错误页面加载机制源码分析
Springboot学习04-默认错误页面加载机制源码分析 前沿 希望通过本文的学习,对错误页面的加载机制有这更神的理解 正文 1-Springboot错误页面展示 2-Springboot默认错误处 ...
- MySQL死锁系列-常见加锁场景分析
在上一篇文章<锁的类型以及加锁原理>主要总结了 MySQL 锁的类型和模式以及基本的加锁原理,今天我们就从原理走向实战,分析常见 SQL 语句的加锁场景.了解了这几种场景,相信小伙伴们也能 ...
- JVM之调优及常见场景分析
JVM调优 GC调优是最后要做的工作,GC调优的目的可以总结为下面两点: 减少对象晋升到老年代的数量 减少FullGC的执行时间 通过监控排查问题及验证优化结果,可以分为: 命令监控:jps.jinf ...
- Oracle dbms_lock.sleep()存储过程使用技巧-场景-分析-实例
<Oracle dbms_lock.sleep()存储过程使用技巧>-场景-分析-实例 摘要:今天是2014年3月10日,北京,雾霾,下午组织相关部门开会.会议的结尾一名开发工程师找到了我 ...
- 理解 python metaclass使用技巧与应用场景分析
理解python metaclass使用技巧与应用场景分析 参考: decorator与metaclass:http://jfine-python-classes.readthedocs. ...
- 数据结构之链表C语言实现以及使用场景分析
牢骚:本篇博客两个星期前已经存为草稿,鉴于发生一些糟糕的事情,今天才基本完成.本人6月份应届毕业生一枚,毕业后当天来到帝都,之后也非常顺利,面试了俩家公司都成功了.一家做C++方面电商ERP,一家做w ...
- Linux内核OOM机制的详细分析(转)
Linux 内核 有个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了 防止内存耗尽而内核会把该进程杀掉.典 ...
随机推荐
- spring-boot-note
1 java配置和注解配置相结合,不需要任何的xml配置即可 2 spring tool suite 3 src/main/resources/banner.txt http://patorjk.co ...
- Datatable的Select()
利用datatable的select方法筛选出符合条件的datarow进行操作 Select() Select(string filterExpression) Select(string filte ...
- StringBuilder 拼接sql语句比较快
StringBuilder 拼接sql语句比较快StringBuilder strBuilder = new StringBuilder();strSql += "insert into t ...
- 第一章 基础设施,1.3 阿里视频云ApsaraVideo是怎样让4000万人同时狂欢的(作者:蔡华)
1.3 阿里视频云ApsaraVideo是怎样让4000万人同时狂欢的 前言 在今年的双11中,双11天猫狂欢夜的直播成为一大亮点. 根据官方披露数据,直播总观看人数超4257万,同时观看人数峰值达5 ...
- ArcGIS Server开发教程系列(8)ArcGIS API for Javascript-控件(小部件)(续)纯代码
完整代码如下: <html> <head> <meta http-equiv="Content-Type" content="text/ht ...
- Java——Swing事件处理
import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import javax.swing.JFrame; ...
- h5移动端滑动的细节
1.获取手指滑动的长度: var hasTouch = 'ontouchstart' in window && !isTouchPad, _start:function(e){ var ...
- 无法访问 IIS 元数据库。您没有足够的特权访问计算机上的 IIS 网站
我是WIN10+VS2015 之前用的是VS2012 后来卸载了VS2012 就出现了这个错误,请问该如何解决 在VS的图标上 按右键用管理员(Administrator)运行
- Sphinx 2.2.6 window下安装全过程 未完 持续标记~~~~
由于在win8.1下安装 选的这个版本 Win64 binaries w/MySQL+PgSQL+libstemmer+id64 support 2.2.6-release 7.3M 下载页面 htt ...
- 固定IP 正常访问谷歌
如题 地址栏直接输入 http://173.194.1.150/ 正常使用 ~标记一下~