Ускорение удаления одинаковых строк DataGridView - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

Написал программу по сканированию папки и извлечению их txt файлов ней текста и импорта его в DataGridView Дальше по нажатию кнопки идет подсчет и удаление повторяющихся строк
Листинг программы
  1. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
  2. Dim lr&
  3. Dim i, j, f As Integer
  4. Dim a, b, c As Object
  5. c = 0
  6. lr = DataGridView1.RowCount
  7. f = 0
  8. For i = 0 To lr - 1
  9. ProgressBar1.Maximum = lr
  10. If i >= lr Then Exit Sub
  11. ProgressBar1.Value = i
  12. Label2.Text = "Пройдено " & i & " из " & lr
  13. If DataGridView1.Item(4, i).Value = "" And DataGridView1.Item(0, i).Value <> "" Then DataGridView1.Item(4, i).Value = 1
  14. ProgressBar2.Maximum = 0
  15. c = 1
  16. For j = lr - 1 To i + 1 Step -1
  17. c = c + 1
  18. ProgressBar2.Maximum = j
  19. If c <= j Then ProgressBar2.Value = c
  20. a = DataGridView1.Item(0, i).Value
  21. b = DataGridView1.Item(0, j).Value
  22. If a = b Then
  23. DataGridView1.Item(4, i).Value = DataGridView1.Item(4, i).Value + 1
  24. DataGridView1.Rows.RemoveAt(j)
  25. If f >= 2 Then
  26. Label3.Text = "Удалено " & f = f + 1
  27. Else
  28. Label3.Text = "Удалено " & f
  29. End If
  30. End If
  31. Next j
  32. lr = DataGridView1.RowCount
  33. Next i
  34. End Sub
Время его выполнения около 20 минут, возможно ли каким-нибудь образом ускорить сие дело? Или нужно по другому выполнить эти задачи? суть программы - сканирование плей-листов за 3 месяца за каждый день и составление отчета по количеству выходов песен за этот срок, импорт из базы недостающих данных и экспорт в ексель

Решение задачи: «Ускорение удаления одинаковых строк DataGridView»

textual
Листинг программы
  1. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
  2.     Dim example() As String = {"110311.txt", "010411.txt", "110511.txt", "110311.txt", _
  3.                              "200311.txt", "050211.txt", "111111.txt", "220311.txt", _
  4.                              "010611.txt", "181011.txt", "210311.txt", "010511.txt", _
  5.                              "170311.txt", "260111.txt", "190811.txt"}
  6.     Dim yy As Integer = NumericUpDown2.Value 'год (2000,...,2025)
  7.     Dim kv As Integer = NumericUpDown1.Value 'квартал (1,2,3,4)
  8.     Dim dt1 As Date
  9.     Dim dt2 As Date
  10.     getDt(yy, kv, dt1, dt2)
  11.     Dim sel = (From ee As String In example Where betweenDates(ee, dt1, dt2) = True).ToArray
  12.     'смотрим результат
  13.     Dim ss As String = String.Join(vbCrLf, sel)
  14.     MsgBox(ss)
  15. End Sub
  16. Private Sub getDt(ByVal y As Integer, ByVal k As Integer, ByRef dt1 As Date, ByRef dt2 As Date)
  17.     Dim st As Integer = (k - 1) * 3 + 1
  18.     dt1 = New Date(y, st, 1)
  19.     If k = 4 Then
  20.         dt2 = (New Date(y + 1, 12, 31))
  21.     Else
  22.         dt2 = (New Date(y, st + 3, 1)).AddDays(-1)
  23.     End If
  24. End Sub
  25. Private Function betweenDates(ByVal ss As String, ByVal d1 As Date, ByVal d2 As Date) As Boolean
  26.     Dim s As String = ss.Substring(0, ss.Length - 4)
  27.     Dim d As Integer
  28.     Dim bb As Boolean
  29.     If s.Length = 6 Then
  30.         d = CInt(s.Substring(0, 2))
  31.     Else
  32.         d = CInt(s.Substring(0, 1))
  33.     End If
  34.     Dim dd As Date = New Date(2000 + CInt(s.Substring(s.Length - 2)), CInt(s.Substring(s.Length - 4, 2)), d)
  35.     If dd >= d1 AndAlso dd <= d2 Then bb = True
  36.     Return bb
  37. End Function

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.556 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут