日期:2014-05-18  浏览次数:20966 次

try/catch与性能
在程序中如何使用,什么时候使用try/catch
它对性能又有什么影响?

------解决方案--------------------
你觉得有异常出现就用它.
这个没什么影响的...
反正你不手工捕捉,系统也会帮你自动捕捉的...

------解决方案--------------------
当操作可能引发异常时使用啊,如数据库连接时,对性能没有什么影响吧,学习....
------解决方案--------------------
try/catch是捕获异常用的,用于可能会出现异常的地方,当出现异常的时候对异常进行处理,它跟性能有关系吗?
------解决方案--------------------
使用try/catch是影响系统的性能的,最简单的道理是我们一般把try块称之为监视块,你派个东西监视你的代码,这能不消耗额外的资源么?

在程序中如果能有其他方式避免异常,则需要考虑避免使用try/catch

比较典型的处理是,比如做类型转换的时候,用int.TryParse而不是int.Parse,这样就不用去捕获System.FormatException

如果你要处理 x/y这样的表达式,提前判断了y是否为0,就不用去处理System.DivideByZeroException

在使用数组的地方,使用 Length属性而不是固定值,可以防止System.IndexOutOfRangeException

但如果是我们的程序无法处理的问题,那么就必须使用异常处理了,必须你向用户的D盘写一个文件,用户可能没有D盘,可能D盘是光驱,可能D盘空间不够,这个不是我们的程序能解决的,就只能用异常处理了

最后,当项目比较大的时候,异常处理可能导致你无法找到你出错的地方。

所以,慎重使用异常处理。
------解决方案--------------------
哇 好详细 晓习
------解决方案--------------------
会在il多生成一些代码
不过这也是个度的问题
也不能因噎废食啊
------解决方案--------------------
探讨
使用try/catch是影响系统的性能的,最简单的道理是我们一般把try块称之为监视块,你派个东西监视你的代码,这能不消耗额外的资源么?

在程序中如果能有其他方式避免异常,则需要考虑避免使用try/catch

比较典型的处理是,比如做类型转换的时候,用int.TryParse而不是int.Parse,这样就不用去捕获System.FormatException

如果你要处理 x/y这样的表达式,提前判断了y是否为0,就不用去处理System.DivideByZeroException


------解决方案--------------------
http://181796968.blog.51cto.com/213419/41776
上面的文章可以参考一下
------解决方案--------------------
4楼好象把整个事情说反了。

--你派个东西监视你的代码,这能不消耗额外的资源么?

抛出异常是CPU内部的固有功能,当CPU计算或寻址出错时会产生一个硬件中断,中断程序会处理try/catch代码。所以完全不影响性能,并没有派个东西监视你的代码。


--在程序中如果能有其他方式避免异常,则需要考虑避免使用try/catch
--比较典型的处理是,比如做类型转换的时候,用int.TryParse而不是int.Parse,这样就不用去捕获ystem.FormatException

正好相反,在程序中应尽量使用try/catch,比如做类型转换的时候,如果自己编一段程序去判断原始数据的格式是不明智的,有些判断比较复杂(bouble、DateTime等等),会浪费保贵的时间,还会影响程序的性能,还不容易把所有异常都考滤进来,比如咱们很少考滤内存够不够等等。


--当项目比较大的时候,异常处理可能导致你无法找到你出错的地方。
当项目较大的时候异常处理显示的错误信息会帮助你尽快的找到出错的地方。


在程序中不仅要使用系统的异常,还有学会自己抛出异常。具体方法是在所有的子程序中抛出异常,在主程序中显示异常信息,这已经成为一种代码规范。以下是一个实例。

//主程序显示异常
function onSubmit()
{
try
{
VerifyPage();
Form1.submit();
}
catch( err )
{
alert( err.description );
}
}

//子程序抛出各种异常
function VerifyPage()
{
var strerr = "Please make your information completely.";

if( document.getElementById('TextBox3').value == "" )
throw( new Error( strerr ) );

isEmail( document.getElementById('TextBox3').value );
}

//子子程序抛出各种异常
function isEmail( stremail )
{
if( stremail == null || stremail == "" )
throw( new Error( "Please Enter the E-mail!" ) ) ;

if( stremail.length > 100 )
throw( new Error( "E-mail is too long!" ) );

var regu ="^(([0-9a-zA-Z]+)|([0-9a-zA-Z]+[_.0-9a-zA-Z-]*[0-9a-zA-Z]+))@([a-zA-Z0-9-]+[.])+([a-zA-Z]{2}|net|NET|com|COM|gov|GOV|mil|MIL|org|ORG|edu|EDU|int|INT)$";
var re = new RegExp(regu);
if( stremail.search(re) == -1 )
throw( new Error( "Is not validate E-mail address!" ) );
else
return
}


总之,使用try/catch能够使代码简捷明析,提高程序性能。目前已成为编程规范。
------解决方案--------------------