Ускорение удаления одинаковых строк DataGridView - Visual Basic .NET
Формулировка задачи:
Написал программу по сканированию папки и извлечению их txt файлов ней текста и импорта его в DataGridView
Дальше по нажатию кнопки идет подсчет и удаление повторяющихся строк
Время его выполнения около 20 минут, возможно ли каким-нибудь образом ускорить сие дело?
Или нужно по другому выполнить эти задачи?
суть программы - сканирование плей-листов за 3 месяца за каждый день и составление отчета по количеству выходов песен за этот срок, импорт из базы недостающих данных и экспорт в ексель
Листинг программы
- Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
- Dim lr&
- Dim i, j, f As Integer
- Dim a, b, c As Object
- c = 0
- lr = DataGridView1.RowCount
- f = 0
- For i = 0 To lr - 1
- ProgressBar1.Maximum = lr
- If i >= lr Then Exit Sub
- ProgressBar1.Value = i
- Label2.Text = "Пройдено " & i & " из " & lr
- If DataGridView1.Item(4, i).Value = "" And DataGridView1.Item(0, i).Value <> "" Then DataGridView1.Item(4, i).Value = 1
- ProgressBar2.Maximum = 0
- c = 1
- For j = lr - 1 To i + 1 Step -1
- c = c + 1
- ProgressBar2.Maximum = j
- If c <= j Then ProgressBar2.Value = c
- a = DataGridView1.Item(0, i).Value
- b = DataGridView1.Item(0, j).Value
- If a = b Then
- DataGridView1.Item(4, i).Value = DataGridView1.Item(4, i).Value + 1
- DataGridView1.Rows.RemoveAt(j)
- If f >= 2 Then
- Label3.Text = "Удалено " & f = f + 1
- Else
- Label3.Text = "Удалено " & f
- End If
- End If
- Next j
- lr = DataGridView1.RowCount
- Next i
- End Sub
Решение задачи: «Ускорение удаления одинаковых строк DataGridView»
textual
Листинг программы
- Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
- Dim example() As String = {"110311.txt", "010411.txt", "110511.txt", "110311.txt", _
- "200311.txt", "050211.txt", "111111.txt", "220311.txt", _
- "010611.txt", "181011.txt", "210311.txt", "010511.txt", _
- "170311.txt", "260111.txt", "190811.txt"}
- Dim yy As Integer = NumericUpDown2.Value 'год (2000,...,2025)
- Dim kv As Integer = NumericUpDown1.Value 'квартал (1,2,3,4)
- Dim dt1 As Date
- Dim dt2 As Date
- getDt(yy, kv, dt1, dt2)
- Dim sel = (From ee As String In example Where betweenDates(ee, dt1, dt2) = True).ToArray
- 'смотрим результат
- Dim ss As String = String.Join(vbCrLf, sel)
- MsgBox(ss)
- End Sub
- Private Sub getDt(ByVal y As Integer, ByVal k As Integer, ByRef dt1 As Date, ByRef dt2 As Date)
- Dim st As Integer = (k - 1) * 3 + 1
- dt1 = New Date(y, st, 1)
- If k = 4 Then
- dt2 = (New Date(y + 1, 12, 31))
- Else
- dt2 = (New Date(y, st + 3, 1)).AddDays(-1)
- End If
- End Sub
- Private Function betweenDates(ByVal ss As String, ByVal d1 As Date, ByVal d2 As Date) As Boolean
- Dim s As String = ss.Substring(0, ss.Length - 4)
- Dim d As Integer
- Dim bb As Boolean
- If s.Length = 6 Then
- d = CInt(s.Substring(0, 2))
- Else
- d = CInt(s.Substring(0, 1))
- End If
- Dim dd As Date = New Date(2000 + CInt(s.Substring(s.Length - 2)), CInt(s.Substring(s.Length - 4, 2)), d)
- If dd >= d1 AndAlso dd <= d2 Then bb = True
- Return bb
- End Function
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д