在vb.net中多线程分割巨大的for循环工作

时间:2014-08-28 13:42:25

标签: .net vb.net multithreading loops

我是vb.net中的多线程新手,但我想如何构建以下程序

  • 我想在每次想要查询远程服务器以获取一个值时从1循环到4096766 问题是每个值需要10秒才能返回,但是整个成本是由于网络问题而与我的循环无关。
  • 我想将循环划分为1000个单独的循环,例如第一个循环 从1到1000,第二个从10001到2000等等我将同时执行1000个线程以加快进程

注意:许多数字都不会返回任何内容,但问题是在数字没有相关名称的超时时间超出10秒这是非常昂贵的

第一个帖子

open text file (filename = 1000.txt)
for i = 1 to 1000 
    getEmpName(i)
    write i to text file
    write name to text file
    new line
next

第二个帖子

open text file (filename = 2000.txt)
for i = 10001 to 2000 
    getEmpName(i)
    write i to text file
    write name to text file
    new line
next
如果可行,这将拯救我的生命 感谢您的支持

2 个答案:

答案 0 :(得分:0)

以这样的方式创建查找会更好一点,即getEmpName(i)不需要超时来指示找不到名称。

如果无法从getEmpName(i)函数本身中删除它,最好缓存第一次运行的结果并半定期刷新缓存(取决于多久一次)数据变化)。

这样,当查找名称时,您会点击缓存,并可以快速发现名称是否存在(0成本旁边)。

答案 1 :(得分:0)

多线程这项工作要求你的getEmpName(i)子线程是线程安全的,就是在使用其他资源,库调用和变量时应该小心(比如为我存储EmpName ...)。

如果您当前的实施工作正常,拆分文件并多次启动您的程序,您需要做的就是收集输出并将它们组合起来。这是一种快速安全的“多线程”/“多进程”方式; )

对于Real Multithrad,让您的正常工作流程读取文件,从Threadpool为每个i启动一个新线程并等待调用返回您的名字,也可以将所有名称写入一个安全列表或收集,排序和输出。观察并发网络连接和错误的最大数量。