vb.net多线程加速我的程序执行

时间:2014-08-28 10:58:05

标签: vb.net multithreading

是否可以使用多线程程序来加速我的程序进程?

我的程序如下

1-生成一个随机数 2-由这个头号远程服务器查询 3-将结果存储在文本文件中

问题基本上是当我查询远程服务器时需要10秒钟 而不是等待这次我想生成100或1000数字并单独发送它们然后当结果出现时我会将它们保存在缓冲区中并稍后将它们保存到文本中

有任何帮助或想法吗?

2 个答案:

答案 0 :(得分:1)

我会考虑使用Microsoft的Reactive Framework(NuGet Rx-Main)。

这将是您的代码:

Dim rnd = New Random()

Dim query = _
    From i In Observable.Range(0, 1000) _
    From n In Observable.Start(Function () rnd.Next()) _
    From r in Observable.Start(Function (x) CallWebService(x)) _
    Select r

File.WriteAllLines(filePath, _
    String.Join(Environment.NewLine, query.ToEnumerable()))

所有在具有最大吞吐量的后台线程上运行。

完成!

答案 1 :(得分:0)

Module Module1

    Sub main()
        Randomize()        
        Dim r = New Random
        Dim rLock = New Object
        Dim results As New Concurrent.ConcurrentBag(Of Tuple(Of Integer, String))

        Dim getRandom = New Func(Of Integer)(Function()
                                                 SyncLock rLock
                                                     Return r.Next(0, Integer.MaxValue)
                                                 End SyncLock
                                             End Function)


        '                               total number of loops
        '                                       v
        System.Threading.Tasks.Parallel.For(0, 100, Sub(i)
                                                        Dim aRandom = getRandom()

                                                        'process the query

                                                        Dim output = "-server-response-" 'or whatever the outcome of processing

                                                        results.Add(New Tuple(Of Integer, String)(aRandom, output))
                                                    End Sub)

        For Each itm In results
            Console.WriteLine(itm.Item1 & vbTab & itm.Item2)
        Next
    End Sub

End Module