Как ускорить извлечение слов из RichTextBox?

#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 секунд