-1

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

4

3 回答 3

3

用逻辑术语做你必须做的事情,不要关心性能。

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

于 2013-08-26T13:59:17.813 回答
2

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

于 2013-08-26T13:59:10.633 回答
1

一些想法:

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

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

于 2013-08-26T14:02:22.670 回答