"投掷"或"尝试......捕获"会阻碍性能吗?

Ric*_*ard 2 c# exception

可能重复:
.NET异常有多慢?

我一直在阅读(包括这里)关于何时应该/不应该使用异常的地方.我现在想要改变我的代码,它会抛出使方法返回false并像这样处理它,但我的问题是:它是投掷还是尝试......可能会阻碍性能...... 我的意思是,这是否可以接受:


bool method someMmethod()
{
    try
    {    
        // ...Do something
    catch (Exception ex) // Don't care too much what at the moment...
    {
        // Output error
        // Return false
    }
    return true // No errors
Run Code Online (Sandbox Code Playgroud)

或者有更好的方法来做到这一点?(我很难看到"未处理的异常......"哈哈!)

Tho*_*mas 6

问自己以下问题:异常例外吗?

  • 如果在正常的程序流程中发生这种情况,例如,无法解析用户键入的数字,请不要使用例外.
  • 如果这通常不会发生,而是表示程序控制之外的问题,例如丢失的文件,请使用异常.


Ada*_*son 5

如果您的问题是块的存在是否try...catch会影响性能,那么不会。

如果您的问题是使用基于异常的模型而不是返回值模型是否会对性能产生影响,那么是的,有。有这样的功能:

public void DoWork()
{
    if(something) throw new Exception(...);
}
Run Code Online (Sandbox Code Playgroud)

在错误条件下,它的执行效果不如这样的函数:

public bool DoWork()
{
    if(something) return false;

    return true;
}
Run Code Online (Sandbox Code Playgroud)

异常必须展开堆栈并将您踢到最近的catch块才能工作,因此其中涉及开销。返回状态值更简单,但当异常不常见时,它也是一个更不稳定的接口。

然而,这不是重点。如果您编写的代码以异常为规则,那么您就会遇到问题。异常应该用在……例外……条件下,例如当您遇到无法在代码中解释的条件时。

int考虑像和 这样的类型DateTime。这些类型提供(除其他外)两个不同的函数,用于将字符串值转换为相应的intDateTime值:ParseTryParseParse使用异常模型,因为它假设此时您将向其传递一个格式良好的整数值,因此如果它得到其他值则这是一个异常条件。TryParse另一方面,它是为您不确定字符串的格式而设计的,因此它使用返回值模型(以及一个out参数以获得实际的转换值)。