建议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/farmer-y/p/7992813.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. 2498-R06 SFP与线缆的选择与配置
  2. 【PHP开发规范】继承与扩展:PSR-2 编码风格规范
  3. Django使用心得(四)
  4. P1262_美帝的间谍网络被我部捕获!
  5. C#:导入Excel通用类(CSV格式)
  6. 软考网络工程师--计算机硬件基础
  7. kafka 服务端消费者和生产者的配置
  8. r语言c5.0决策树算法参数,决策树算法CART、C5.0的R语言实现——(三)
  9. C++的三种封装层级
  10. vsan的容量设备故障和缓存设备故障分析
  11. 一个令你颤抖的flutter动画:Basic Animations
  12. Unity BMFont自定义字体
  13. 三极管三种基本放大电路
  14. MPLS LDP基础
  15. c语言中常量分为那两种,C语言中的常量和字面值
  16. Python爬虫(5):豆瓣读书练手爬虫
  17. android获取root权限的命令
  18. win7系统提示计算机内存不足,Win7系统下提示内存不足的原因及解决方法
  19. 可以挂靠的工程类证书汇总2014年
  20. vue上传文件到后端,前端接收到后端传来的图片并显示。

热门文章

  1. golang 实现华容道
  2. 密码学之对称加密体系(2):AES、SM4的 S 盒具体算法的实现
  3. 盘点国内程序员不常用的热门iOS第三方库:看完,还敢自称”精通iOS开发”吗?
  4. TensorRT加速应用
  5. 康熙王朝---转自别人的旁白分析
  6. 后端再进阶一步,MySQL 优化学习第1天
  7. [机器学习] --- 红楼梦后四十回到底是谁写的?机器学习分析法
  8. 月薪超1.6万美元!对冲基金实习生也内卷
  9. Legacy Code Tool
  10. AccountManager getAccount 在Android O 8.0版本中获取为 null ?