Более эффективен для каждой петли - PullRequest
2 голосов
/ 26 июля 2011

Есть ли более эффективный способ сделать этот код?

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

Ответы [ 2 ]

1 голос
/ 05 августа 2011
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

Вот более сжатая версия ... он использует меньше переменных, которые я предполагаю = меньше памяти, но я сомневаюсь, что вы заметите большую разницу ...

0 голосов
/ 05 августа 2011

Если ваш Datatable огромен, тогда сделайте цикл параллельным. Я бы порекомендовал использовать parallel.foreach, поставляемый с .NET 4, но поскольку вы указали .NET 2, вы можете реализовать его самостоятельно.

Проверьте «Шаблоны для параллельного программирования»:

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