建议64:为循环增加Tester-Doer模式而不是将try-catch置于循环内

如果需要在循环中引发异常,你需要特别注意,应为抛出异常是一个相当影响性能的过程。应该尽量在循环当中对异常发生的一些条件进行判断,然后根据条件进行处理。

做个测试:

            Stopwatch watch = Stopwatch.StartNew();int x = 0;for (int i = 0; i < 10000; i++){try{int j = i / x;}catch{}}Console.WriteLine(watch.ElapsedMilliseconds);watch = Stopwatch.StartNew();for (int i = 0; i < 10000; i++){if (x == 0){continue;}int j = i / x;}Console.WriteLine(watch.ElapsedMilliseconds);Console.ReadKey();

输出为:

796

0

以上代码中,我们预见了代码肯能会发生DivideByZeroException异常,于是,调正策略,对异常发生的条件进行了特殊处理:Continue让效率得到了极大的提升。

转自:《编写高质量代码改善C#程序的157个建议》陆敏技

转载于:https://www.cnblogs.com/jesselzj/p/4737859.html

编写高质量代码改善C#程序的157个建议——建议64:为循环增加Tester-Doer模式而不是将try-catch置于循环内...相关推荐

  1. 编写高质量代码改善C#程序的157个建议——建议148:不重复代码

    建议148:不重复代码 如果发现重复的代码,则意味着我们需要整顿一下,在继续前进. 重复的代码让我们的软件行为不一致.举例来说,如果存在两处相同的加密代码.结果在某一天,我们发现加密代码有个小Bug, ...

  2. 编写高质量代码改善C#程序的157个建议——建议86:Parallel中的异常处理

    建议86:Parallel中的异常处理 建议85阐述了如何处理Task中的异常.由于Task的Start方法是异步启动的,所以我们需要额外的技术来完成异常处理.Parallel相对来说就要简单很多,因 ...

  3. 编写高质量代码改善C#程序的157个建议——建议87:区分WPF和WinForm的线程模型...

    建议87:区分WPF和WinForm的线程模型 WPF和WinForm窗体应用程序都有一个要求,那就是UI元素(如Button.TextBox等)必须由创建它的那个线程进行更新.WinForm在这方面 ...

  4. 编写高质量代码改善C#程序的157个建议——建议127:用形容词组给接口命名

    建议127:用形容词组给接口命名 接口规范的是"Can do",也就是说,它规范的是类型可以具有哪些行为.所以,接口的命名应该是一个形容词,如: IDisposable表示可以被释 ...

  5. 编写高质量代码改善C#程序的157个建议——建议133:用camelCasing命名私有字段和局部变量...

    建议133:用camelCasing命名私有字段和局部变量 私有变量和局部变量只对本类型负责,它们在命名方式也采用和开放的属性及字段不同的方法.camelCasing很适合这类命名. camelCas ...

  6. 编写高质量代码改善C#程序的157个建议——建议104:用多态代替条件语句

    建议104:用多态代替条件语句 假设要开发一个自动驾驶系统.在设计之初,此自动驾驶系统拥有一个驾驶系统命令的枚举类型: enum DriveCommand{Start,Stop} 当前该枚举存在两个命 ...

  7. 编写高质量代码改善C#程序的157个建议——建议157:从写第一个界面开始,就进行自动化测试...

    建议157:从写第一个界面开始,就进行自动化测试 如果说单元测试是白盒测试,那么自动化测试就是黑盒测试.黑盒测试要求捕捉界面上的控件句柄,并对其进行编码,以达到模拟人工操作的目的.具体的自动化测试请学 ...

  8. 编写高质量代码改善C#程序的157个建议——建议130:以复数命名枚举类型,以单数命名枚举元素...

    建议130:以复数命名枚举类型,以单数命名枚举元素 枚举类型应该具有负数形式,它表达的是将一组相关元素组合起来的语义.比如: enum Week{Monday,Tuesday,Wednesday,Th ...

  9. 编写高质量代码改善C#程序的157个建议——建议50:在Dispose模式中应区别对待托管资源和非托管资源...

    建议50:在Dispose模式中应区别对待托管资源和非托管资源 真正资源释放代码的那个虚方法是带一个bool参数的,带这个参数,是因为我们在资源释放时要区别对待托管资源和非托管资源. 提供给调用者调用 ...

  10. 编写高质量代码改善C#程序的157个建议——建议9: 习惯重载运算符

    建议9: 习惯重载运算符 在开发过程中,应该习惯于使用微软提供给我们的语法特性.我想每个人都喜欢看到这样的语法特性: int x = 1; int y = 2; int total = x + y; ...

最新文章

  1. sql server2008用ip远程连接
  2. js获取网页的各种高度
  3. HTML5培训教程学习之动效制作
  4. call()、apply()、bind()
  5. Akka并发编程——第六节:Actor模型(五)
  6. 关于pandas绘制图片不显示问题
  7. 域名型通配符ssl证书_西部数码使用指南:申请了主域名SSL证书,是否还需要申请www域名的...
  8. 改善代码质量的编程规范
  9. 在html中怎样加表格斜线表头,如何在Word表格中插入斜线
  10. 无法访问网址的最基本原因分析,让你永远无法访问淘宝/京东
  11. 运筹优化学习07:Lingo的 @if 函数的使用方法
  12. 怎样提高自己的分析能力
  13. centos(11)-ps进程管理
  14. 侍魂胧月传说服务器维护中,侍魂胧月传说手游4月8日停机维护更新公告
  15. 【深度强化学习】GAIL 与 IRL 的理解
  16. 有趣的二进制算法小魔术
  17. 华中科技大学计算机学院郑强教授简历,华中科大教授声讨后勤被处分 郑强个人简介介绍...
  18. TypeScript/JavaScript 2021-02-25T03:34:35.772Z 时区 日期格式化
  19. python矩阵的共轭转置_基础 | Python 下的矩阵操作
  20. mongodb 10、mongodb从节点失联解决方法

热门文章

  1. 2021年中国旅游产业整体现状分析,疫情后市场恢复不及预期,相较疫情前仍有差距「图」
  2. 定义符号常量pi.const float pi= 3.1415926f; 这句话是否正确
  3. 4、时间同步的ntp服务安装与配置。
  4. Tay继任者:微软人工智能聊天机器人Zo上线测试
  5. java 批量打印_用java怎样实现批量打印
  6. 支付宝手机网站支付详细流程步骤
  7. 电商互动消息如何进行架构演进?
  8. oracle—高级查询
  9. 威胁猎人产品总监彭巍:业务安全发展趋势及对安全研发的挑战
  10. 防止首网页篡改 html,网站web前端的加密方式 防止数据被篡改