异常处理机制与性能
在经常会失败的代码中使用异常,那么性能无法让人接受,下面两种常用的排除异常模式:
一. 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.用布尔类型作为返回类型。

浙公网安备 33010602011771号