2012-03-13 71 views
2

我使用C#和.NET框架4.面向对象的概念已经实施开发一个网站。每个图层都有一些Try Catch块,用于处理不同的错误并返回不同的错误消息。我发现它在加载try catch块越来越多时越来越慢。我想知道这是为什么。任何替代方案?纠正我,如果我错了。感谢您的回复。Try Try Catch块的性能太慢了吗?任何替代方案?

+1

听起来就像你有很好的质量代码,你在一个'例外'情况下观察到性能问题。如果它对用户来说是特殊/罕见的,那么在错误路径很慢的大事件中,也许没有关系? – sethcall 2012-03-13 17:10:06

+1

你还需要确保你没有从其他try/catch中抛出一堆强类型的异常(这也可能是一个问题)。相反,只需使用throw。同样使用CustomExceptions可以帮助很多。 – 2012-03-13 17:36:57

回答

3

没有什么错误使用try/catch块。他们不会改变性能。改变性能会抛出错误!

,请参见网站下方特别:

抛出异常是非常昂贵的,所以一定要确保你不 扔了很多。使用Perfmon来查看您的应用程序抛出多少个例外。您可能会惊讶地发现,应用程序的某些区域会抛出比您预期的更多异常。对于 更好的粒度,也可以编程方式通过使用性能计数器检查异常号 。

http://msdn.microsoft.com/en-us/library/ms973839.aspx

2

异常通常是帮助我们处理错误的初始化(生成带有无效状态的对象)的对象,因为构造函数不返回任何值,或在其他情况下,如果我们有一个方法,该方法返回的一个实例对象不应该为null。因此,在构造函数的情况下,你可以创建一个名为的getInstance的静态方法,该方法将返回对象或空的情况下在错误的初始化的情况下,使您的建设者在这种情况下,私人但例外的是要好得多。在返回实例的方法中,您可以使用COM技术使用的技术,方法是传递一个对您的布尔变量的引用,它将向您显示执行结果。

2

大约有try/catch语句和它们的成本一些好的linksMicrosoft表示可能会对性能产生负面影响。

我会检讨是否要使用的例外,因为他们是真正的,特殊情况下,并没有对程序流程。如果他们确实影响程序流程,那么你就冒着副作用的可能性。 MSDN指出:

抛出异常时清除中间结果。呼叫者 应该可以假设有没有副作用时异常 从方法

如果是这样的话,那么我会考虑明确地建立其返回错误方法如/在必要时并处理此抛出而不是。