【发布时间】:2015-11-21 02:22:17
【问题描述】:
目前我们有一个服务器,其中文件以每天大约 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
【问题讨论】:
标签: .net vb.net multithreading visual-studio threadpool