VB.net цикл занимает 8 секунд, что я нахожу медленным

#vb.net #for-loop #foreach #visual-studio-2015

#vb.net #для цикла #foreach #visual-studio-2015

Вопрос:

Я уже задавал подобный вопрос раньше, но даже с ответами я все еще не мог заставить код работать быстрее. Теперь я изменил код до того, каким он был, и ищу совета о том, как ускорить мой код.

У меня есть richtextbox, который составляет 30 тыс. строк, и мне нужно заменить блок текста, когда для каждого цикла достигает определенной строки richtextbox, которая содержит 30 тыс. строк. (Если переменные не объявлены в этом коде, это означает, что они являются глобальными переменными)

Вот мой код:

 Dim counter As Integer = 0
        Dim startcount As Boolean = False
        Dim holdstring As String = ""


        Dim completertb4 As New StringBuilder("")
        Dim completertb4one As New StringBuilder("")
        MsgBox(newrtb.Lines.Count,, "")
        Dim counteroflines As Integer = 1
        For Each line As String In newrtb.Lines

            'MsgBox(counteroflines amp; "----" amp; holdstring,, "")

            If line.Contains(richtextboxl0) Then
                startcount = True
                holdstring = vbNewLine amp; richtextbox3text

            ElseIf startcount = True Then
                If counter = temptextbox3count Then
                    startcount = False
                Else
                    counter  = 1
                End If

            ElseIf completertb4.ToString = "" Then
                holdstring = line
            Else
                holdstring = line

            End If

            If counteroflines >= 1 And counteroflines <= 10000 Then

                completertb4.Append(vbNewLine amp; holdstring amp; "----" amp; counteroflines)
            Else

                completertb4one.Append(vbNewLine amp; holdstring amp; "----" amp; counteroflines)
            End If

            counteroflines  = 1
        Next
  

Комментарии:

1. Есть ли шанс, что вы могли бы проиллюстрировать или предоставить некоторые примеры данных?

2. Я решил свою проблему, спасибо!

Ответ №1:

Вот как я сократил свой код с 08:00 секунд до 00: 01 секунды. От 8 секунд до менее секунды.

             Dim counter As Integer = 0
        Dim countertrue As Integer = 0
        Dim countintertal As Integer = 0


        Dim newrtbstrarray As String() = newrtb.Lines
        Dim rtb3array As String() = richtextbox3text.Lines

        For Each line As String In newrtbstrarray

            If line.Contains(richtextboxl0) Then
                countertrue = counter
                For Each element As String In rtb3array
                    newrtbstrarray(countertrue) = rtb3array(countintertal)
                    countertrue  = 1
                    countintertal  = 1
                Next

            End If

            counter  = 1
        Next