目前,我们有一个服务器,该服务器以每天大约10,000个文件(每小时500份)的速度保存文件。
我的程序已经成功地解析了这些文件并将相关信息放入数据库。问题是,我的单线程应用程序跟不上进度,而且真的落后了。
我想尝试创建一个由3-5个线程组成的线程池,看看这是否有助于跟上进度。
应用程序查看文件文件夹并抓取所有文件名,如下所示:
For Each newfile As String In Directory.GetFiles(fileLoc)
Next我想做的是根据线程是否处于活动状态将每个文件分配给线程池中的一个线程,如下所示:
For Each newfile As String In Directory.GetFiles(fileLoc)
If Not (Thread1.IsAlive) Then
Thread1 = New Threading.Thread(Sub() dowork(arg1, arg2))
ElseIf Not (Thread2.IsAlive) Then
Thread2 = New Threading.Thread(Sub() dowork(arg1, arg2))
ElseIf Not (Thread3.IsAlive) Then
Thread3 = New Threading.Thread(Sub() dowork(arg1, arg2))
End If
Next我正在浏览论坛,我浏览了一个教程,使用
System.Threading.ThreadPool.QueueUserWorkItem(Sub() dowork(arg1, arg2))不确定这是否是我想要的,但我没有看到一种方法来设置池中活动的线程数(3-5)。
因此,我的问题是--我如何查看文件列表,并将文件分配给一个打开的/可用的线程?
非常感谢所有的帮助,谢谢-Z
编辑
For Each newfile As String In Directory.GetFiles(fileLoc).AsParallel.WithDegreeOfParallelism(10)
theWorker(newfile)
Next发布于 2015-08-26 21:27:19
你不需要自己管理任何池。
Directory.GetFiles(fileLoc)
.AsParallel().WithMaxDOP(3)
.ForEach(path => dowork(path, arg2));就这样。通过实验确定最佳平行度。
https://stackoverflow.com/questions/32236888
复制相似问题