尝试...捕获:性能

时间:2019-02-23 12:05:55

标签: vb.net performance try-catch

我有一个示例代码,可以将数字转换为以N为底的数字。
我可以有2、3或4位数字。

我的功能正常运行,如下所示:

Private Function BaseN(s As String)
    Dim d = Val(s(s.Length - 1))
    Dim c = Val(s(s.Length - 2))
    Dim a, b As Integer
    Try
        b = Val(s(s.Length - 3))
    Catch
        b = 0
    End Try
    Try
        a = Val(s(s.Length - 4))
    Catch
        a = 0
    End Try

    Return (a * (n * n * n) + b * (n * n) + c * n + d + 1).ToString
End Function

但是出于某种原因,转换我的文本大约需要10秒钟。

我尝试过这种方式:

Private Function BaseN(s As String)
    Dim d = Val(s(s.Length - 1))
    Dim c = Val(s(s.Length - 2))
    Dim a, b As Integer
        b = 0
        a = 0

    Return (a * (n * n * n) + b * (n * n) + c * n + d + 1).ToString
End Function

这里的转换大致是即时的。

所以我想知道为什么try catch这么长的运行时间,或者我是否对它们进行了错误的使用。

1 个答案:

答案 0 :(得分:0)

仅仅因为您没有使用Try ... Catch捕获错误,并不意味着您不必考虑虚假的用户输入。以下代码应通过检查输入的整数和字符串长度来避免崩溃。

Integer.TryParse(string,integerVariable)将检查字符串以查看是否可以将其转换为Integer。它用字符串的Integer表示填充integerVariable。即使integerVariable失败,它也会为零,这使您的最终方程式有效。

我没有检查功能本身的有效性。

Private Function BaseN(s As String, n As Integer) As String
    Dim StringLength As Integer = s.Length
    Dim a, b, c, d As Integer
    Select Case StringLength
        Case 2
            Integer.TryParse(s(StringLength - 1), d)
            Integer.TryParse(s(StringLength - 2), c)
        Case 3
            Integer.TryParse(s(StringLength - 3), b)
            Integer.TryParse(s(StringLength - 1), d)
            Integer.TryParse(s(StringLength - 2), c)
        Case 4
            Integer.TryParse(s(StringLength - 4), a)
            Integer.TryParse(s(StringLength - 3), b)
            Integer.TryParse(s(StringLength - 1), d)
            Integer.TryParse(s(StringLength - 2), c)
        Case Else
            Return ""
    End Select
    Return (a * (n * n * n) + b * (n * n) + c * n + d + 1).ToString
End Function