我不想讨论何时以及不引发异常。我希望解决一个简单的问题。99%的情况下,不引发异常的论点围绕它们的缓慢进行,而另一方声称(通过基准测试)速度不是问题。我已经阅读了许多有关某一方面的博客,文章和帖子。那是什么呢?
答案中的一些链接:Skeet,Mariani,Brumme。
我站在“不慢”的一边,或者更确切地说是“不够慢,不值得在正常使用中避免使用它们”。我已经写了两篇有关此的简短 文章。对基准方面存在批评,这主要归结为“在现实生活中,有更多的堆栈要通过,因此您会浪费高速缓存等”-但是使用错误代码沿堆栈向上移动 也 将破坏缓存,所以我认为这不是一个特别好的论点。
为了清楚起见,我不支持使用不合逻辑的异常。例如,int.TryParse完全适合转换用户的数据。当读取机器生成的文件时,这是适当的,失败的意思是“该文件的格式不正确,我真的不想尝试处理该文件,因为我不知道还有什么问题。 ”
int.TryParse
在“仅在合理的情况下”使用例外时,我从未见过一个性能受到例外严重影响的应用程序。基本上,除非您遇到重大的正确性问题,否则异常不应该经常发生,并且如果您遇到重大的正确性问题,那么性能并不是您面临的最大问题。