这段时间一直在做教务系统的基础系统部分,经过了N多时间,我们的系统已经初见模型。
按照软件工程的思想,我们一步步走下来,包括原型的设计、文档的编写等等内容,终于,前些天我们开始了代码的编写,其实,一旦开始编写代码,这个项目距离完成就接近了。
由于我们是第一次系统的来完成一个项目,总是会出现这样和那样的问题。今天主要说说我们在异常处理方面的讨论。
说到编写代码,不可避免的要考虑异常处理的问题,对于异常处理,我们的原则还是尽早发现,尽早处理。关于这个原则,以前只是当做原则,今天找到了一个理论依据。
.net在产生异常时是逐步向外层查找处理程序的,就是说,如果当前函数中没有对异常进行处理,才查找调用当前函数的那一个函数,一直找遍整个应用程序。如果还没有,就交给runtime。
单从性能方面考虑,越早发现问题,对于我们的系统的性能影响越小。
关于这一点,我们大家都没有什么异议。但在关于Try,Catch语句的使用上就出现了分歧。具体我们是如何产生分歧的,现在记不太清楚了,最后,我们的落脚点落在了使用Try,Catch对系统性能是否会产生很大影响?
当然,我们所有的观点都是建立在必须处理错误的基础上的,现在问题已经转变为trycatch处理对系统性能的影响。
网上大家的观点也是各不相同:
1、http://www.cnblogs.com/wlb/archive/2009/11/30/1613412.html
这位朋友认为,使用trycatch处理异常不会对系统性能造成影响。他给出了测试例子以及测试结果。
2、http://wenku.baidu.com/view/904033156edb6f1aff001f7c.html
这位朋友的观点是,trycatch对系统性能的影响是有的,尤其是第一次发生异常的时候,会对性能造成比较大的影响。而主要的消耗是发生在Catch部分。
3、还有很多人认为,trycatch对系统性能有很大影响。看到很多人说,但是没有发现一篇具体分析的文章。
最后,基于以上及很多没有给出的文章,我认为要使用tryCatch进行异常处理。
首先,还是那个原则:尽早发现,尽早处理。
第二,要尽量给CLR一个明确的异常信息,不要使用Exception去过滤异常。
第三,尽量不要将try…catch写在循环中。
第四,try尽量少的代码,如果有必要可以使用多个catch块,并且将最有可能抛出的异常类型,书写在距离try最近的位置。
第五,不要只声明一个Exception对象,而不去处理它。