0

我需要选择一种方法来编写一段会重复很多的代码,所以我希望它尽可能快。

这是我的代码(目前):

For Cel As Short = 0 To Cels - 1
    Rw = Int(Cel / 3) + 1
    Col = Cel - ((Rw - 1) * 3) + 1
    RifTxt = TabW(RifTW("Pi")).Cells(Cel)
    If Col = 1 Then
        RowArr(Col) = RifTxt
    Else
        If DateTime.TryParse(RifTxt, culture, Styles, DateResult) Then
            RowArr(Col) = DateResult.ToString("yyyy-MM-dd")
        Else
            RowArr(Col) = "0000-00-00"
        End If
        If Col = 3 Then
            RowArr(3) = Rw
            Pi_W.Rows.Add (RowArr)
        End If
    End If
Next Cel

我想改变它(使用 ElseIf 或 Select Case),如图所示:

使用 ElseIf

For Cel As Short = 0 To Cels - 1
    Rw = Int(Cel / 3) + 1
    Col = Cel - ((Rw - 1) * 3) + 1
    RifTxt = TabW(RifTW("Pi")).Cells(Cel)
    If Col = 1 Then
        RowArr(Col) = RifTxt
    ElseIf Col = 2
        If DateTime.TryParse(RifTxt, culture, Styles, DateResult) Then
            RowArr(Col) = DateResult.ToString("yyyy-MM-dd")
        Else
            RowArr(Col) = "0000-00-00"
        End If
    ElseIf Col = 3 Then
        If DateTime.TryParse(RifTxt, culture, Styles, DateResult) Then
            RowArr(Col) = DateResult.ToString("yyyy-MM-dd")
        Else
            RowArr(Col) = "0000-00-00"
        End If
        RowArr(3) = Rw
        Pi_W.Rows.Add (RowArr)
    End If
Next Cel

或使用选择案例:

For Cel As Short = 0 To Cels - 1
    Rw = Int(Cel / 3) + 1
    Col = Cel - ((Rw - 1) * 3) + 1
    RifTxt = TabW(RifTW("Pi")).Cells(Cel)
    Select Case Col
    Case is = 1 Then
        RowArr(Col) = RifTxt
    Case is = 2
        If DateTime.TryParse(RifTxt, culture, Styles, DateResult) Then
            RowArr(Col) = DateResult.ToString("yyyy-MM-dd")
        Else
            RowArr(Col) = "0000-00-00"
        End If
    Case is  = 3 Then
        If DateTime.TryParse(RifTxt, culture, Styles, DateResult) Then
            RowArr(Col) = DateResult.ToString("yyyy-MM-dd")
        Else
            RowArr(Col) = "0000-00-00"
        End If
        RowArr(3) = Rw
        Pi_W.Rows.Add (RowArr)
    End Select
Next Cel

我试图在 .netFiddle 上比较这三种方法,但我不确定结果。

你能建议我正确的选择吗?

4

1 回答 1

0

在这种情况下,您SelectIf示例很可能会编译为相同的机器代码,并具有完全相同的性能。

无论如何:不要担心像这样的微优化,除非你已经证明这是代码的问题部分。首先,写一些可读和可维护的东西。一种或另一种方式的性能差异将可以忽略不计。

与往常一样,如果您想知道什么性能更好,请尝试一下

于 2015-11-19T19:52:38.117 回答