例如,我有一个 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
?抱歉问了一个很长的问题。
问问题
102 次
3 回答
3
用逻辑术语做你必须做的事情,不要关心性能。
不要基于性能考虑来设计异常类型。如果您发现它们对图书馆的有用性和清晰度有意义且有帮助,请创建它们。
于 2013-08-26T13:59:17.813 回答
2
简短地回答您的问题:如果您不处理异常并添加有用信息,请不要捕获并重新抛出异常。只是捕获异常然后重新抛出它们会弄乱堆栈跟踪(例如,当原始异常丢失时),当然它会影响性能(因为运行时需要准备一个哑堆栈跟踪)。如果您需要在provider.dll
ifservice.dll
无法引用它时隐藏异常,则需要在 中重新抛出它们(如果您想从中helper.dll
捕获特定异常)。provider.dll
service.dll
于 2013-08-26T13:59:10.633 回答
1
一些想法:
- 您编写的包装代码越少,维护代码就越容易
- 不要将异常用于逻辑控制
- 异常与性能关系不大,如果你问这个问题,你可能用它来控制逻辑
所以答案是:定义你需要(独特地)处理的有用且有意义的异常。除非您使用异常来指导逻辑流程,否则不会影响性能,在这种情况下您应该停止并重构您的应用程序。
于 2013-08-26T14:02:22.670 回答