#vb.net #winforms
#vb.net #winforms
Вопрос:
Я пытаюсь создать программу поиска soundcloud, я извлекаю данные поиска с помощью:
https://api-v2.soundcloud.com/search?q= Anything amp;client_id= Myid
И экспортируется в RichTextBox,
Затем я извлекаю нужную мне информацию в ListBox, каждый тип в другом ListBox, например:
title in ListBox1
username in ListBox2
Проблема в том, что этот код занимает немного много времени, если данные исследования большие,
Вопрос в том, могу ли я ускорить свой код? Или есть более быстрый способ?
Это мой код:
Dim si As Integer = -1
Dim test As String = ""
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
If RichTextBox1.Text.Contains("""title"":""") Then
Dim startTITLE As Integer = RichTextBox1.Text.IndexOf("""title"":""")
If test.Contains(""",") Then
RichTextBox1.Text = RichTextBox1.Text.Replace(test, String.Empty)
Dim title As String = test.Replace("""title"":""", String.Empty).Replace(""",", String.Empty)
ListBox1.Items.Add(title)
test = ""
si = -1
Else
si = 1
test = RichTextBox1.Text(startTITLE si)
End If
Else
Timer1.Stop()
Timer2.Start()
End If
End Sub
Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
If RichTextBox1.Text.Contains("""username"":""") Then
Dim startTITLE As Integer = RichTextBox1.Text.IndexOf("""username"":""")
If test.Contains(""",") Then
RichTextBox1.Text = RichTextBox1.Text.Replace(test, String.Empty)
Dim username As String = test.Replace("""username"":""", String.Empty).Replace(""",", String.Empty)
ListBox2.Items.Add(username)
test = ""
si = -1
Else
si = 1
test = RichTextBox1.Text(startTITLE si)
End If
Else
Timer2.Stop()
Timer3.Start()
End If
End Sub
Private Sub Timer3_Tick(sender As Object, e As EventArgs) Handles Timer3.Tick
If RichTextBox1.Text.Contains("""artwork_url"":""") Then
Dim startTITLE As Integer = RichTextBox1.Text.IndexOf("""artwork_url"":""")
If test.Contains(""",") Then
RichTextBox1.Text = RichTextBox1.Text.Replace(test, String.Empty)
Dim url As String = test.Replace("""artwork_url"":""", String.Empty).Replace(""",", String.Empty)
ListBox3.Items.Add(url)
test = ""
si = -1
Else
si = 1
test = RichTextBox1.Text(startTITLE si)
End If
Else
Timer3.Stop()
End If
End Sub
Комментарии:
1. Выполните эту очистку и назначьте строку ListBox, когда вы получаете текст из API, а не после добавления текста в RichTextBox. Используйте это только для представления, а не для хранения; вы можете использовать список объектов класса для хранения загружаемых вами текстовых частей. Вам больше не нужны эти таймеры.
2. Я извлек информацию непосредственно для RichTextBox без загрузки файла API, да, я использовал RichTextBox для просмотра сейчас. Я заменю его строкой, когда закончу. Я также использовал его для удаления текста, который я извлек, и повторного поиска, чтобы текст не повторялся
3. Таймеры не тикают так быстро, по умолчанию не быстрее 64 раз в секунду, независимо от того, насколько маленьким вы делаете интервал. Таким образом, с 3 таймерами это не может быть быстрее 47 мс на строку, вы заметите это. Используйте 1 таймер, и это будет мгновенно в 3 раза быстрее. Подумайте о том, чтобы преобразовать более одной строки текста за тик для другого простого улучшения. Рассмотрите фоновую программу, чтобы код мог выполняться на полной скорости.
4. @Hans Passant спасибо, чувак, это стало быстрее, когда я поместил их в один таймер, я не знаю, почему я не подумал об этом xD, я собираюсь попробовать BackgroundWorker спасибо
5. Теперь это быстрее, благодаря man Таймер завершен за 23 секунды BackgroundWorker завершен за 15 секунд