我正在创建一个从数据库中获取文件数据的程序。要求是文件在存在“IMAGE_00001.JPG”、“IMAGE_00002.JPG”、...
由于性能问题,我正在并行加载数据,但在创建文件时遇到了问题。
For i As Long = 1 To maxSeqNr
DIDir = New DirectoryInfo(currDir)
If DIDir.GetFiles(currFilePrefix & Microsoft.VisualBasic.Right(maxSeqNrLeadingZeros & CStr(i), Len(maxSeqNr.ToString)) & ".*", SearchOption.TopDirectoryOnly).Length = 0 Then
sRetValue = currFilePrefix & Microsoft.VisualBasic.Right(maxSeqNrLeadingZeros & CStr(i), Len(maxSeqNr.ToString)) & currFileExtention
Dim oSW As StreamWriter
oSW = New StreamWriter(currDir & sRetValue)
oSW.WriteLine("")
oSW.Close()
oSW.Dispose()
oSW = Nothing
Exit For
End If
Next
问题是有时 2 个线程正在运行同一行代码。我添加了日志记录,我发现了这个:
Check for 'IMAGE_00001.JPG' ; Directory: ''
Check for 'IMAGE_00001.JPG' ; Directory: ''
Check for 'IMAGE_00002.JPG' ; Directory: 'IMAGE_00001.JPG'
Check for 'IMAGE_00003.JPG' ; Directory: 'IMAGE_00001.JPG,IMAGE_00002.JPG'
在我执行 Exists 语句之前是否有可能“锁定”工作目录。创建文件后“释放”?其他线程应该等到他们可以“锁定”目录。