私はこのコードの塊を持っています:
noObjs = 0
Dim oName As String
Dim i As Integer
Dim tripleIndex As Integer = 0
Do While sr.Peek() <> -1
readCSV = sr.ReadLine.Split(sepChar(0))
If readCSV.Length >= 3 Then
oName = readCSV(0)
For i = noObjs - 1 To 0 Step -1
If oName = objNames(i) Then
obIndOfTriple(tripleIndex) = i
Exit For
End If
Next i
If i = -1 Then
objNames(noObjs) = oName
obIndOfTriple(tripleIndex) = noObjs
noObjs += 1
End If
End If
tripleIndex += 1
Loop
sr.Close()
そして、私はそのように並列化しようとしています:
noObjs = 0
Dim oName As String
Dim i As Integer
Dim tripleIndex As Integer = 0
Dim allData() As String = File.ReadAllLines(in_file)
Parallel.For(0, allData.Count, Sub(k)
readCSV = allData(k).Split(sepChar(0))
If readCSV.Length >= 3 Then
oName = readCSV(0)
For i = noObjs - 1 To 0 Step -1
If oName = objNames(i) Then
obIndOfTriple(tripleIndex) = i
Exit For
End If
Next i
If i = -1 Then
objNames(noObjs) = oName
obIndOfTriple(tripleIndex) = noObjs
noObjs += 1
End If
End If
tripleIndex += 1
End Sub)
ただし、次の場所で「インデックスが配列の境界外でした」というメッセージが表示されます。
If oName = objNames(i) Then
ここで、objNames() と obIndOfTriple() がグローバルに (固定サイズで) 宣言されていることにも言及する必要があります。いくつかの検索から、これはスレッドセーフに関係していることを理解していますが、私はまだ並列処理の初心者です。誰かが私を正しい方向に向けることができますか? ありがとう。