性能。定义我自己的异常类型是否有用?

时间:2013-08-26 13:55:28

标签: c# .net performance exception

例如,我有一个dll(Helper.dll),其中包含一些通过提供程序库(Provider.dll)处理外部系统的方法。 Provider.dll定义SystemIsDownException,然后将其重新投放到Helper.dll中。另外,我有另一个使用Service.dll和其他吨的dll(Helper.dll),它必须捕获不同类型的异常并以某种方式处理它们。我的问题是:如果我在SystemIsDownException中抓住Provider.dll(来自Service.dll),是否真的会影响效果?或者我应该为Provider.dllHelper.dll的每个例外定义自己的例外类型吗?抱歉,这是一个很长的问题。

3 个答案:

答案 0 :(得分:3)

按照逻辑术语做你必须做的事情,而不关心表现。

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

一些想法:

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

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