作者:vuefine
文献: msdn library
平台:.NET 2.0+


Parse和TryParse

  DateTime中Parse(string s)和TryParse(string s, out datetime)都是用来将字符型的日期时间转化为等效的System.DateTime。那么,他们之间有没有区别呢,除了函数的参数不同外。先看下代码:

            string dateTimeStr = "";DateTime dt = DateTime.Parse(dateTimeStr);           

  运行空字符串,将其转化为日期时间型,显然不能转化,并且Parse()会抛出一个异常: System.FormatException: s 中不包含日期和时间的有效字符串表示形式。但是,运行TryParse这个转化方法:

            string dateTimeStr = "";       DateTime dt2; //dt2未经初始化,就被传递给函数TryParse()bool sucflag = DateTime.TryParse(dateTimeStr, out dt2);

  转化首先是不抛出异常的,dt2被赋值为日期时间的最小值,sucflag为false。看下对函数的注释:

当此方法返回时,如果转换成功,则包含与 s 中包含的日期和时间等效的 System.DateTime 值;如果转换失败,则为 System.DateTime.MinValue。如果s 参数为 null,是空字符串 (“”) 或者不包含日期和时间的有效字符串表示形式,则转换失败。*该参数未经初始化即被传递。这个函数是不会抛出任何异常的。

Try-Parse

  看到他们的不同后,进一步来讲,parse()抛出异常必然影响性能,TryParse()未抛出任何异常,这是一种优化异常性能的设计模式,称为Try-Parse Pattern。以下是微软的官方解释:

For extremely performance-sensitive APIs, an even faster pattern than the Tester-Doer Pattern described in the previous section should be used. The pattern calls for adjusting the member name to make a well-defined test case a part of the member semantics. For example, DateTime defines a Parse method that throws an exception if parsing of a string fails. It also defines a corresponding TryParse method that attempts to parse, but returns false if parsing is unsuccessful and returns the result of a successful parsing using an out parameter.

Tester-Doer

  在解释Try-Parse模式时,微软提出了另外一种模式:Tester-Doer模式,什么是Tester-Doer模式呢? 函数中写入异常,会降低性能,微软给出了这种模式来减小异常带来的副作用。
 
  如下代码:

ICollection<int> numbers = 省略获取数据的逻辑
numbers.Add(1);//Add此处不做可写性检查

  以上缺陷:假如集合是只读的,方法Add会抛出异常。调用这个方法的地方会经常抛出异常,因此会影响系统的性能。为了避免这个设计缺陷,微软提出: Sometimes performance of an exception-throwing member can be improved by breaking the member into two.

  将Add()分解为:

ICollection<int> numbers = 省略获取数据的逻辑
if(!numbers.IsReadOnly) //Tester
{numbers.Add(1); //Doer
}

  Tester-Doer模式 总结:

The member used to test a condition, which in our example is the property IsReadOnly, is referred to as the tester. The member used to perform a potentially throwing operation, the Add method in our example, is referred to as the doer.

   分解后,先做只读性检测,这样会减少Add抛出只读性异常的次数,提升性能。

总结
  Try-Parse Pattern和Tester-Doer模式是两种替代抛异常的优化方式,起到优化设计性能的作用。

.NET框架-Try-Parse和Tester-Doer相关推荐

  1. C Tester Doer Pattern

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! In d ...

  2. 最新2021修复安装了谷歌框架GMS后华为/荣耀手机FCM推送服务仍不能用的问题(Microsoft Authenticator微软验证器在安装了Google服务后还是提示不可用)

    简介 Firebase Cloud Messaging (FCM) 是 Google Cloud Messaging (GCM) 的升级版,是一种便于在移动应用和服务器应用程序之间进行消息传递的云推送 ...

  3. Parse系列之后台搭建与使用

    什么是Parse? 官网:https://docs.parseplatform.org/ Github:https://github.com/parse-community Parse是一个移动后端, ...

  4. 读《实战 GUI 产品的自动化测试》之:第二步,构建利于维护的自动化测试系统...

    转载自:http://www.ibm.com/developerworks/cn/rational/r-cn-guiautotesting2/ 基石--IBM 框架简介 Rational Functi ...

  5. 软件工程学习总结(1)——软件测试工具详解

    很多初学者对软件测试工具不是很了解,测试人员通过工具能够使软件的一些简单问题直观的显示在读者的面前,这样能使测试人员更好的找出软件错误的所在.软件测试工具分为自动化软件测试工具和测试管理工具.提高测试 ...

  6. java毕业设计—— 基于java+JSP+SSH的婴幼儿产品销售系统设计与实现(毕业论文+程序源码)——婴幼儿产品销售系统

    基于java+JSP+SSH的婴幼儿产品销售系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+JSP+SSH的婴幼儿产品销售系统设计与实现,文章末尾附有本毕业设计的论文和源码下 ...

  7. 基于SSH的婴幼儿产品销售系统的开发与设计毕业设计论文

    源码下载 http://www.byamd.xyz/hui-zong-1/ 摘要 科学技术日新月异的进步,让人类生活发生了巨大的变化,计算机技术的飞速发展,使各行各业在计算机技术应用方面得到了广泛的普 ...

  8. 测试游戏的软件电脑运行,什么是软件性能测试_电脑测试性能软件_测试电脑游戏性能软件...

    工具分类 国内介绍软件测试工具比较好的网站为:51Testing软件测试论坛 开源测试管理工具:Bugfree.Bugzilla.TestLink.mantis zentaopms 开源功能自动化测试 ...

  9. 常用的软件测试工具大全

    开源测试管理工具:Bugfree.Bugzilla.TestLink.mantis 开源功能自动化测试工具:Watir.Selenium.MaxQ.WebInject 开源性能自动化测试工具:Jmet ...

  10. 面试——测试工程师(20191009)

    小小的记录一下求职经历,一起加油呀~ ٩̋(•͈ω•͈)و 职位描述: 依据需求文档及设计文档,编写测试用例: 依据测试用例执行手工测试,反馈跟踪产品BUG及用例缺陷,协助开发人员定位及修复bug,并 ...

最新文章

  1. 16 导出pcb各网络的布线长度_设计PCB流程
  2. java web 哪些方法不能被从写_JAVA_WEB面试题
  3. IC/FPGA大疆笔试题分析(预分析)
  4. 在ASP.NET MVC3项目中,自定义404错误页面
  5. Codeforces Beta Round #4 (Div. 2 Only) B. Before an Exam dp
  6. 【报告分享】2021新茶饮研究报告.pdf(附下载链接)
  7. 你在微信漂流瓶里遇到过哪些有意思的人和事?
  8. 如何将VBE中模块、工作表、工作簿和窗体等内的所有代码一次导出?
  9. 整理vim格式回车变成空两格
  10. android9最新系统,【5/31更新】Android 9.0系统升级时间的最新情况
  11. CC2530单片机精确延时的时间分析
  12. java爬虫音乐搜索_爬虫爬取抖音热门音乐 - MS_Andrew的个人空间 - OSCHINA - 中文开源技术交流社区...
  13. java 微博发布时间_java 对新浪微博微博的发表时间解析
  14. 如何在Ubuntu 20.04上使用Seafile同步和共享文件
  15. 一个简单文本分类任务-EM算法-R语言
  16. 怎样提高平面设计色彩表现力
  17. jQuery读取JSON数据(jQuery调用JSON数据学习第二天)
  18. javascript 正则表达式判断只能是中文、英文或者中文加英文
  19. 这个“中台”不简单,将自然资源信息化全面带入三维世界
  20. 实用的单片机接反电路,再也不怕电源接反了

热门文章

  1. rating vs nominal 额定和标称区别
  2. 【计算机原理与接口技术(UNIX)⑲ 完结篇】——可编程计数器 8254 [ 流光发生器、8254工作方式检测程序的设计]
  3. mysql日期返回周一_MYSQL如何获得指定日期所在周周一的日期?
  4. 机器学习——逻辑回归
  5. html网页设计期末大作业——化妆品html+div商城(19页)
  6. 网站建设(5)——博客程序的选择和部署
  7. ARM加载Realtek-8188CUS USB无线网卡(二)_连接到WiFi网络
  8. 《万里长江图》告诉我们:金沙江是长江的正源
  9. 1_01李婉玲_数据结构_1012
  10. 巨头夹缝求生存:菜鸟创业团队的辛酸苦辣 (本文转载)