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