加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使用多线程进行循环

发布时间:2020-12-15 04:19:00 所属栏目:百科 来源:网络整理
导读:我是线程新手,想做类似这个问题的事情: Speed up loop using multithreading in C# (Question) 但是,我不确定这个解决方案对我来说是否是最好的,因为我希望它们继续运行并且永远不会完成. (对于那个问题,我也使用.net 3.5而不是2.0.) 我想做这样的事情: fo
我是线程新手,想做类似这个问题的事情:

Speed up loop using multithreading in C# (Question)

但是,我不确定这个解决方案对我来说是否是最好的,因为我希望它们继续运行并且永远不会完成. (对于那个问题,我也使用.net 3.5而不是2.0.)

我想做这样的事情:

foreach (Agent agent in AgentList)
{
    // I want to start a new thread for each of these
    agent.DoProcessLoop();
}

---

public void DoProcessLoop()
{
    while (true)
    {
        // do the processing

        // this is things like check folder for new files,update database
        // if new files found
    }
}

ThreadPool是最好的解决方案还是有更适合这种情况的东西?

更新:感谢所有伟大的答案!我以为我会更详细地解释用例.许多代理可以将文件上载到文件夹.每个代理都有自己的文件夹,可以将资源上传到(csv文件,图像,pdf).我们的服务(它意味着是在他们上传资产的服务器上运行的Windows服务,请放心我将很快回来关于Windows服务的问题:))如果有任何新资产,将继续检查每个代理的文件夹,如果有,数据库将被更新,并为其中一些创建静态html页面.由于他们可能需要一段时间才能上传所有内容,我们希望他们能够立即看到他们上传的更改,我们认为每个代理的线程都是个好主意,因为没有代理人需要等待其他人来完成(我们有多个处理器,所以想要使用它们的全部容量).希望这能解释它!

谢谢,

Annelie

解决方法

鉴于您描述的特定用法(正在查看文件),我建议您使用 FileSystemWatcher来确定何时有新文件,然后使用线程池触发一个线程来处理文件,直到没有更多要处理的文件为止 – 哪个线程退出.

这应该减少i / o(因为你不是经常轮询磁盘),减少CPU使用率(因为轮询磁盘的多个线程的常量循环将使用循环),并减少你在任何时候运行的线程数(假设没有对文件系统进行不断的修改).

您可能只想在主线程上打开和读取文件,并将数据传递给工作线程(如果可能),以将i / o限制为单个线程.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读