异常处理机制与性能

在经常会失败的代码中使用异常,那么性能无法让人接受,下面两种常用的排除异常模式:

一. Tester - Doer模式:

老习惯,直接贴代码:

ICollection<int> numbers = new List<int>();
...
if (numbers.IsReadOnly)
{
numbers.Add(1);
}

用来对条件进行测试的成员称为Tester,在上面代码里就是 if (numbers.IsReadOnly) ,用来执行实际操作并可能会抛出异常的成员称为Doer,在上面代码里就是numbers.Add(1);。

注意:

1.如果tester比doer操作更慢,那不建议使用Teser - Doer.

2.如果是多线程中,需要慎重考虑前后代码 teser 与doer 之间会不会出现问题。

 

 

二. Try - Parse模式:

Try - Parse比Tester - Doer性能更快,下面介绍Try - Parse的好处,记得我以前写过一段数据类型转换的代码:

public decimal GetValue(string str)
{
decimal d;
try
{
d = Decimal.Parse(str);
}
catch (Exception ex)
{

d = 1;
}
return d;
}

这种通过抛出异常时来负值的方法实在是太浪费性能,Try - Parse模式就可以很好的解决这个问题:

public decimal GetValue(string str)
{
decimal d;
if (Decimal.TryParse(str, out d) == false)
{
d = 1;
}
return d;
}


这就是Try - Parse,当转换数据类型失败时并不会抛出异常,而是函数返回false,这避免了异常引起的性能问题。

要实现Try - Parse时需注意:

1.命名需要以Try开头。

2.用布尔类型作为返回类型。



posted @ 2012-03-10 21:00  疯狂科学家  阅读(192)  评论(0)    收藏  举报