使用C#中的exception。 它会影响性能吗?

基本上,问题是:C#中的exception是否会影响性能? 避免例外重新抛出是否更好? 如果我在我的代码中生成exception,它是否会影响性能?

对不起问题本身的sillines

Microsoft的开发类库设计指南是一个非常有价值的资源。 这是一篇相关的文章:

例外与表现

我还会推荐Microsoft Press的“ 框架设计指南”一书。 它有很多来自设计指南链接的信息,但它由MS的人和Anders Hejlsberg本人注释。 它提供了很多洞察事物的“为什么”和“如何”的方式。

如果您担心exception性能,那么您使用它们是错误的。

但是,例外确实会影响性能。

引发exception是C#中的一个昂贵的操作(与C#中的其他操作相比),但还不够,我会避免这样做。

我同意Jared的意见,如果你的申请由于提出和抛出exception而显着变慢,我会看一下你的整体策略。 有些东西可能会被重构,以使exception处理更有效,而不是忽略在代码中引发exception的概念。

通过try / catch语句运行代码根本不会影响性能。 如果抛出exception,则唯一的性能影响是…因为运行时必须展开堆栈并收集其他信息才能填充exception对象。

其他大多数人都说,加上:不要将exception作为编程流程的一部分。 换句话说,不要为account.withdrawalAmount > account.balance类的东西抛出exception。 这是一个商业案例。

关注绩效的另一个重要因素是吞噬exception。 这是一个滑坡,一旦你开始允许你的应用程序吞下exception,你就开始在任何地方进行。 现在你可能会允许你的应用程序抛出你不知道的exception,因为你吞下它们,你的表现会受到影响,你不知道为什么。

这不是愚蠢的,只是我已经在其他地方看到它了。

当事情非常特殊时,例外就会发生。 大多数情况下,当没有多少机会从中恢复时,您会重新抛出exception(可能在记录之后)。 所以它不应该打扰你正常的程序执行过程。

顾名思义的例外情况是特殊的。 因此,您不能指望它们是优化的重要目标。 更常见的是,他们没有表现良好,因为他们有其他优先事项,如收集有关出错的详细信息。

.NET中的exception确实会影响性能。 这就是为什么它们只应在特殊情况下使用的原因。