并行循环和 Stringbuilder

Parallel Loop & Stringbuilder

简介:大家好,这是我的第一个问题,如果我做错了或做错了什么,请告诉我。我在一个项目上工作,它的功能之一是编写大量文本来处理数据并替换某些行的特定文本并将文件输出到 richtextbox/file.

问题:问题是当我使用并行foreach时,我在richtextbox中的结果到处都是,它们不是按行的(例如第一行可能在并行foreach循环后变成第15行是 运行).

代码的作用:循环遍历 richtextbox 并检查该行是否与临时 richtextbox 中的第一行匹配,如果匹配,它将停止追加并从临时 richtextbox 复制文本并让循环 运行 直到过去的行数与临时richtextbox中的行数匹配,然后继续追加。它基本上是文本的替换。我正在查看大约 20K 行的总输出。

Dim completertb4text As New StringBuilder("")

Parallel.ForEach(newrtb.Lines, Function() New StringBuilder(), Function(x, [option], sb)

If x.Contains(richtextboxl0) Then
  startcount = True
  sb.Append(vbNewLine & richtextbox3text & "111111")
End If

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

If sb.Length = 0 Then
  sb.Append(vbNewLine & x & "222222")
End If

If sb.Length > 0 Then
  sb.Append(vbNewLine & x & "3333333")
End If
Return sb

Function, Sub(sb)     
  SyncLock completertb4text
    completertb4text.Append(sb.ToString())
  End SyncLock
End Sub

非常感谢任何帮助,提前致谢!

以下是我将代码从 08:00 秒缩短到 00:01 秒的方法。

            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