我想将工作人员添加到队列中,但只有前 N 个工作人员并行处理。我找到的所有示例都在 C# 中。
这对程序员来说可能很简单,但我不是。我对 VB 的了解足以编写简单的程序。
但是我的第一个应用程序运行良好,直到它突然达到 100% CPU 然后崩溃。请帮忙(是的,在发布此内容之前,我已经浪费了 5 个小时的工作时间搜索......)
更多上下文:对具有超过 100 万个目录/子目录的文件服务器执行目录结构、文件和权限的递归清单。
流程连续运行,但需要数月才能完成。管理层已经在我的脖子上呼吸了。当我尝试使用 Tasks 时,它会进入大约 1000 个线程,然后达到 100% CPU,停止响应,然后崩溃。这是在具有 112 GB RAM 的 16 核服务器上。
--添加所以,使用信号量提供的示例,这就是我输入的内容:
Public Class InvDir
Private mSm as Semaphore
Public Sub New(ByVal maxPrc As Integer)
mSm = New Semaphore(maxPrc, maxPrc)
End Sub
Public Sub GetInventory(ByVal Path As String, ByRef Totals As Object, ByRef MyData As Object)
mSm.WaitOne()
Task.Factory.StartNew(Sub()
Dim CurDir As New IO.DirectoryInfo(Path)
Totals.SubDirectoryCount += CurDir.GetDirectories().Count
Totals.FilesCount += CurDir.GetFiles().Count
For Each CurFile As IO.FileInfo in CurDir.EnumerateFiles()
MyData.AddFile(CurFile.FileName, CurFile.Extension, CurFile.FullName, CurFile.Length)
Next
End Sub).ContinueWith(Function(x) mSm.Release())
End Sub
End Class