宗汉文 果金
随着信息产业化的到来,越来越多的企业和个人参与到了软件开发中来,随着开发的不断升级,控件的使用和美化程度也越来越高。但程序的愈发复杂多样,随之而来的是系统的效率和系统的容错能力的下降,往往由于不重视系统容错,不重视垃圾回收,会导致在项目中出现很多意想不到的问题,经常导致客户体验不好,系统意外崩溃的情况出现,可见软件的容错机制在系统中发挥着很重要的作用。
本人从事过很多项目的开发,曾经使用过VB语言,C++语言和C#语言,现如今C#语言的应用范围现在越来越宽广,但是其效率和对于跨平台方面的硬伤也为人诟病。我本人在经历的几个C#项目中,总结了一些程序容错方面的心得,故本文是针对C#语言的相关容错机制进行简要的论述和比较。希望读者能在其中获得自己想要的东西。
(1)C#容错机制一:TRY-CATCH语句。
TRY-CATCH语句。确切的说是TRY-CATCH-FINALLY。不仅是在C#中,在JAVA,C++(最新版)中均有涉及,其语句的逻辑关系为:
Try
{
A;
}
Catch
{
B;
}
Finally
{
C;
}
熟悉C#语言的同学应该都知道,程序的执行顺序应为先进入Try执行A,在执行A遇到错误时执行Catch内的B,最后执行Finally里的C。这就是C#代码中比较基本的一个容错机制。当循环执行某些程序时,可能会遇到由于数据的异常或者内存的溢出导致的问题,当不使用try-catch语句时,会导致系统的崩溃而退出,但是这不是我们想要的结果。所以在循环中使用try-catch后,系统将错误信息捕获,但不影响下一条数据继续执行,循环将继续进行。在catch代码中可以将错误发生的时间,发生的位置,发生的原因记录下来,以为后期進行修改。而Finally中的代码是永远执行的。
当然TRY-CATCH也有缺点或者说是弱点,如果大量的使用,会造成系统的效率下降,速度变慢。大量的使用TRY-CATCH语句会使得程序占用大量的虚拟内存,所以适当的使用TRY-CATCH语句不仅会提升你的代码容错率,也会增加客户好感度。
(2)C#容错机制二:合理的软件事务。
事务处理不仅是C#语言,其他语言也涉及事务处理。现在系统多采用的是多核CPU的服务器提升了处理器和计算机系统的性能。事务处理的增多也是为了减少由于程序开发中的多表操作而造成的信息丢失或者程序死锁的问题。
事务处理的实质就是将多条SQL语句封装,并用Begin开头,End结尾,进行统一执行,当其中一条发生错误时,则事务回滚,之前的语句结果不提交。
由于现在的软件系统越发复杂,越来越多的软件系统涉及了多表操作,事务处理愈发重要,但是当使用事务处理时,效率也是要考量的一个重要因素,不当的事务处理会导致数据内存被大量的占用而造成系统繁忙的出现。所以在处理事务尤其是大规模事务时,SQL语句的编写也是非常重要,处理事务时SQL语句尽量采用参数化编写方式,这样会减少数据库对SQL语句的解析时间,降低系统崩溃的概率。
(3)C#容错机制三:适度的垃圾回收。
系统又卡住了,怎么办?
这是C#的WINFORM工程师经常遇到的问题,尤其在用户和界面以及数据库进行频繁的数据交互的时候。但是C#语言本身就有垃圾回收机制啊,为什么还会那么慢呢?这时候往往的处理方式是增加GC,进行手动的垃圾回收。这样做开始可能会起到一些效果,但是当使用的时间长了,WINFORM系统仍然会逐渐的变慢。这是什么原因呢?
这是我们的程序使用了很多C#的回收程序,出发点是好的,但这样反而导致系统经常性的崩溃,在仔细的走查代码过后,发现是由于垃圾回收程序使用过多,导致垃圾回收反而超过了程序所占用的内存,才导致的崩溃现象出现。所以在后期的修改后,将垃圾回收统一到一处,变成根据时间和内存占用程度智能回收内存垃圾,系统就逐渐正常了。其根本的思路是让系统使用内存,而不是让回收机制占用内存,在系统使用内存达到一定的量,或者达到一定的时间时,在进行内存的释放,会起到意想不到的效果。
(4)C#容错机制四:成熟的软件复用。
软件复用是在应用系统开发中利用已有的开发成果,消除了包括分析、设计、编码、测试等在内的许多重复劳动,从而提高了软件开发的效率;同时,通过复用高质量的已有开发成果,避免了重新开发可能引入的错误,从而提高了软件的质量。
C#中主要采用引用DLL文件的方法做引用,实现成型的代码复用。同一开发团队的开发过程中,也可以利用同事写好的底层代码来提升自己的编写效率。
复用看似是一种减少代码量,提高写作效率的方式,其实也是极大的避免了代码错误。如果系统中大量的采用封装的成型代码,会使得系统的编写过程快捷灵活。并且这些特定的代码由特定人进行编写,更分工明确清楚。极大的提升了系统的健壮性。使得后期维护和管理更加的方便,快捷,能迅速的反应,并定位到人。
以上四点就是本人经过大量的项目试验和总结,对于C#或者说软件容错机制的理解,可能很多理解还有不到位的地方,那就需要更多的经验的积累和提高,未来随着C#的开源之路的进行,.NET平台也会走上跨平台的道路,未来会有想LINUX、安卓、IOS等其他的系统平台使用.NET平台,其相关的容错机制会变化的越来越多,但是其核心内容仍然是使编程语言效率提升。未来的编程语言也将向着更加简单化,封装化,低耦合化的方向迅速的发展。