2015-11-19 23 views
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或者选择案例),如下所示:

使用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 

或使用Select Case:

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上的三种方法,但我不确定结果。

您能否给我建议正确的选择?

+0

我会使用一个函数,返回基于您传递给它的'Col'变量的值。这会让这个更具可读性。 – OneFineDay

+0

你已经得到了代码,NET有一个高分辨率的秒表,只是做一个循环中的每一个,并计时(做它在释放模式)。您可能想要将循环迭代器更改为Int32/Integer。 – Plutonix

+0

@Plutonix你是否在说我使用'For Cel As Integer'会使代码比使用'For Cel As Short'更快? – genespos

回答

0

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

在任何情况下:不要担心这样的微优化,除非你已经表明它是一个代码问题部分。首先写一些可读性和可维护性的东西。这种或那种表现方式的差异将会忽略不计。

一如既往,如果你想知道什么性能更好,试试吧并参阅。