再次探讨企业级开发中的Try......Catch性能问题
第一部分对于之前的文章大家的主要意见有如下Try...Catch不会有性能问题Try...Catch会对性能有一定的影响对我的测试结果有争议测试没有考虑所有环境如预热、网络异常等等不应该用异常处理来作为逻辑处理还是主观上感觉try...catch还是会有性能影响但是到底会有多大不好说。置疑“企业级开发”这个概念第二部分针对以上的一些问题本着没有困难创造困难也要上的精神笔者又做了一些测试但是考虑到真实环境及可能出现的问题代码或多或少有所改动。考虑到的因素有throw new Exception(Kevin让我异常了);这个异常抛出方法是抛出普通的异常方法而实际开发中可能出现的异常类的数量都非常的庞大笔者粗略的估计了一下可能至少得有上千种而且还可以自定义异常类如果按照这个来算的话异常类的数量应该是无穷的。异常类有的处理起来时间会长有的处理起来时间会短有朋友认为网络处理方面的异常处理起来可能时间会稍长一些一旦用try...catch的话处理起来时间可能会长。如果说一个函数的Try...Catch的性能损耗时间比较短那么1000个函数的性能损耗会不会很长比如系统中有1000个函数每个函数中都有一个try...catch,然后又一个方法调用了这1000个函数。 针对这一点就可以把try...catch...放在for循环里喜欢1000次来进行测试。测试中的预热问题尽可能的多考虑真实环境。针对以上问题笔者尽可能的换些异常类进行测试然后将try...catch...放到for循环中进行测试。测试得到如下结论没有使用try...catch不出现异常跟使用了try...catch不出现异常 时间相当。try...catch...的时间从执行函数开始到出现异常的时间异常捕获的时间异常处理的时间。而异常捕获的时间通常微乎其微如果是单次的话可以忽略不计也不会造成性能瓶颈。如果只做异常捕获但是不做异常处理的话循环1000次出现异常的时间约是使用了try...catch不出现异常的391.9倍。因为异常处理的时间由多个部分组成因为不同异常捕获到的时间可能不同异常处理的时间也不尽相同就会导致最后时间加起来结果跟我测试的会有差别。在进行以下的分析之前笔者也请大家认真的思考两个问题什么问题算性能问题什么是性能瓶颈第三部分纠正之前文章中的几点错误try...catch...会造成一定的性能损失但并不是比不用try...catch...性能要高。数据库操作使用事务比不使用事务要速度快的问题。关于数据库操作使用事务比不使用事务快的问题得分两个方面来考虑如果是一个人操作的话使用事务会比不使用事务要快。如果是多个人操作使用事务就不一定快了道理很简单使用事务的话是利用锁来进行并发控制的如果盲目的认为使用事务快而滥用事务那么就可能导致很严重的性能问题多个用户进行并发操作的时候全部被一个人锁住了得一个一个的来可想而知极有可能会因为滥用事务而造成性能瓶颈。笔者之前没有考虑到第二点不过值得庆幸的是我也从来没有滥用过事务。第四部分总结Try...Catch...会损耗一定的性能但不会造成性能瓶颈。建议使用try...catch。尽可能的考虑到可能存在的异常并进行处理尽可能的少出现异常或不出现异常。不要滥用数据库事务提高性能这样可能会造成并发访问的性能问题或性能瓶颈。不要使用try...catch进行流程处理。如果可能的话尽量要把循环写在try...catch内部而不要把try...catch放到循环内部。如果是try...catch中套着try...catch异常处理机制是从内部的try...catch...往外部抛的最先是在内部进行捕获、处理。关于测试。虽然测试还是不能完全的达到真实环境实际上真实的环境也是错综复杂的很难完全兼顾但至少目前的测试来说笔者认为还是达到了我想要的目的。关于什么是企业级开发笔者也只是有个模糊的概念从Google上搜索到了一下一段与大家分享下吧企业级开发主要是针对企业级应用的开发。那么什么是企业级应用呢企业级应用是指那些为商业组织、大型企业而创建并部署的解决方案及应用。这些大型企业级应用的结构复杂涉及的外部资源众多、事务密集、数据量大、用户数多有较强的安全性考虑。当代的企业级应用决不可能是一个个相互独立的系统。在企业中一般都会部署多个彼此连接的、相互通过不同集成层次进行交互的企业级应用同时这些应用又都 有可能与其它企业的相关应用连接从而构成一个结构复杂的、跨越Intranet和Internet的分布式企业应用群集。此外作为企业级应用其不但要有强大的功能还要能够满足未来业务需求的变化易于升级和维护。实际上看到这里大家可能对企业级开发有一个粗略的认识了虽然概念已经给出可是对于理解什么是企业级开发还是有一些困难。可能有的人也会问概念都给你了为什么还这么难理解实际上笔者认为看待某个问题得从多个方面来看才理解的深刻如当你问什么是唯心主义实际上唯心主义是针对唯物主义来进行定义的当你不明白唯心主义的时候恐怕也是很难区分清楚唯物主义的。就像企业级应用是按照什么分类的难道还有个人级开发......最近博客园流行几个新词”吉日风格“、”吉日风格的水贴“可是究竟什么是吉日风格满足什么条件才算吉日风格满足什么条件又算是水贴其实这些都是非常主观的的概念既然很主观就没必要去深究了。