首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ThreadPool处理文件

使用ThreadPool处理文件
EN

Stack Overflow用户
提问于 2015-08-26 21:19:22
回答 1查看 218关注 0票数 1

目前,我们有一个服务器,该服务器以每天大约10,000个文件(每小时500份)的速度保存文件。

我的程序已经成功地解析了这些文件并将相关信息放入数据库。问题是,我的单线程应用程序跟不上进度,而且真的落后了。

我想尝试创建一个由3-5个线程组成的线程池,看看这是否有助于跟上进度。

应用程序查看文件文件夹并抓取所有文件名,如下所示:

代码语言:javascript
复制
      For Each newfile As String In Directory.GetFiles(fileLoc)
      Next

我想做的是根据线程是否处于活动状态将每个文件分配给线程池中的一个线程,如下所示:

代码语言:javascript
复制
          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

我正在浏览论坛,我浏览了一个教程,使用

代码语言:javascript
复制
 System.Threading.ThreadPool.QueueUserWorkItem(Sub() dowork(arg1, arg2))

不确定这是否是我想要的,但我没有看到一种方法来设置池中活动的线程数(3-5)。

因此,我的问题是--我如何查看文件列表,并将文件分配给一个打开的/可用的线程?

非常感谢所有的帮助,谢谢-Z

编辑

代码语言:javascript
复制
    For Each newfile As String In Directory.GetFiles(fileLoc).AsParallel.WithDegreeOfParallelism(10)
        theWorker(newfile)
    Next
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-26 21:27:19

你不需要自己管理任何池。

代码语言:javascript
复制
Directory.GetFiles(fileLoc)
.AsParallel().WithMaxDOP(3)
.ForEach(path => dowork(path, arg2));

就这样。通过实验确定最佳平行度。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32236888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档