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),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了 防止内存耗尽而内核会把该进程杀掉.典 ...
随机推荐
- angular评论星级指令
地址: https://github.com/happen-zh/myStar 支持最大数,是否必填,回调,是否只读
- js002-在HTML中使用JavaScript
js002-在HTML中使用JavaScript 2.1 <script>元素 定义了以下6个属性 async: 可选.表示应该立即下载脚本,但不妨碍页面中的 ...
- 原创最简单的ORM例子
这个仅是为了培训做的一个小例子 public class DB { public static string GetClassName(Type type) { if (type == nul ...
- 添加IP安全策略 远离系统Ping漏洞的威胁
懂得网络的人对于Ping这个最基本的网络命令一定很熟悉,它是一个非常好用的TCP/IP工具.它可以向你提供的地址发送一个小的数据包,然后侦听这台机器是否有“回答”.你可以使用机器的 Internet ...
- Spring MVC学习笔记——Welcome
参考: http://blog.csdn.net/hehexiaoyou/article/details/23747617 http://www.codingyun.com/article/47.ht ...
- 后台程序员的HTTP缓存
1.后端程序员只需要关注请求头: if-None-Match //上一次response头中的ETag的值. 响应头: Etag //是URL的Entity Tag,用于标示URL对象是否改变,区分不 ...
- css div垂直居中
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- ecshop网站搬家缓存无法更新
问题描述: 1.后台产品列表能改,数据也能看到,前端就是不显示 2.缓存无法删除 3.网上其他方法都试过,还是不行 症状:是因为缓存无法删除,无法更新,只需要能重新更新缓存文件即可.网站搬家丢失tem ...
- asp.net常用函数表
文章转载于[IT花园]:http://www.itgarden.com.cn/showtopic-29.aspx Abs(number) 取得数值的绝对值. Asc(String) 取得字符串表达式的 ...
- live555库中的openRTSP实例
一.openRTSP编译运行 a)windows下编译运行 还是以mediaServer作为服务端,openRTSP作为客户端 b)Linux下编译运行 转自http://kuafu80.blog.1 ...