2011-07-26 5 views
2

Existe-t-il un moyen plus efficace de faire ce code?Plus efficace pour chaque boucle

For Each row As DataRow In dt.Rows 
    Dim ts1 As String = row(0).ToString 
    For index As Integer = 1 To 9 
     Dim colName As String 
     colName = dt.Columns(index).ToString 
     For Each row2 As DataRow In dtAppAvail.Rows 
      Dim colName2 As String 
      Dim ts2 As String 
      colName2 = row2("Day").ToString.Substring(0, 3) & " " & CType(row2("Date"), Date).ToString("dd/MM") 
      ts2 = row2("Timeslot").ToString 
      If colName = colName2 AndAlso ts1 = ts2 Then 
       row(index) = row2("AppointmentsBooked") 
      End If 
     Next 
    Next        
Next 
+1

-t-il? Est-ce lent? Y a-t-il une raison pour laquelle vous cherchez à améliorer l'efficacité? –

+2

L'optimisation prématurée est la racine de tous les maux. –

+0

il est lent en raison de tant de boucles pour les boucles - en essayant de le réduire afin qu'il soit plus compact? – scouserider

Répondre

1
For Each row As DataRow In dt.Rows 
      For index As Integer = 1 To 9 
       For Each row2 As DataRow In dtAppAvail.Rows 
        Dim colName2 As String = row2("Day").ToString.Substring(0, 3) & " " & CType(row2("Date"), Date).ToString("dd/MM") 
        If dt.Columns(index).ToString = colName2 AndAlso row(0).ToString = row2("Timeslot").ToString Then 
         row(index) = row2("AppointmentsBooked") 
        End If 
       Next 
      Next 
     Next 

Voici une version plus condensée ... il utilise moins de variables qui, je suppose = moins de stockage de mémoire, mais je doute que vous remarquerez une grande différence ...

0

Si votre Datatable est énorme, puis rend la boucle parallèle. Je vous aurais recommandé d'utiliser parallel.foreach fourni avec .NET 4, mais puisque vous avez spécifié .NET 2, vous pouvez l'implémenter vous-même.

Cochez la case "Modèles de programmation parallèle":

http://www.microsoft.com/download/en/details.aspx?id=19222