表演定义自己的异常类型有用吗



例如,我有一个dll(Helper.dll),它包含一些通过提供程序库(Provider.dll)处理外部系统的方法。Provider.dll定义了SystemIsDownException,我在Helper.dll中重新抛出它。此外,我还有另一个dll(Service.dll),它使用Helper.dll和大量其他dll,它必须捕获不同类型的异常并以某种方式处理它们。我的问题是:如果我在Service.dll中捕获SystemIsDownException(来自Provider.dll),它真的会影响性能吗?或者,我应该为Helper.dllProvider.dll的每个异常定义自己的异常类型吗?很抱歉问了这么长的问题。

做逻辑上必须做的事情,不要关心性能。

不要基于性能考虑来设计异常类型。如果你发现它们对你的图书馆的帮助和清晰度有意义和帮助,就创建它们。

简单地回答您的问题:如果您不处理异常并添加有用的信息,请不要捕获和重新抛出异常。仅仅捕获异常然后重新抛出它们会扰乱堆栈竞争(例如,当原始异常丢失时),当然也会影响性能(因为运行时需要准备一个堆栈竞争哑)。如果您需要从provider.dll隐藏异常(如果service.dll无法引用它),则需要在helper.dll中重新抛出它们(如果您想在service.dll中捕获来自provider.dll的特定异常)。

一些想法:

  • 编写的包装代码越少,维护代码就越容易
  • 不要将异常用于逻辑控制
  • 异常与性能关系不大,如果你问这个问题,你可能会用它来控制逻辑

因此,答案是:定义需要(独特地)处理的有用且有意义的异常。除非您使用异常来引导逻辑流,否则不会对性能造成影响,在这种情况下,您应该停止并重构应用程序。

最新更新