2014-08-28 2 views
0

다중 스레드 프로그램을 사용하여 프로그램 프로세스 속도를 높일 수 있습니까?vb.net 다중 스레드로 프로그램 실행 속도 향상

내 프로그램은 다음

1이 번호를 하나의 원격 서버 3 점 내가 쿼리 할 때

이 문제는 기본적으로 텍스트 파일에 결과에 의해 임의의 숫자를 2 쿼리를 생성입니다 원격 서버 걸리는 시간이 10 초 이 시간을 기다리는 대신 100 또는 1000 숫자를 생성하여 개별적으로 보내고 결과가 나오면 버퍼에 저장하고 나중에 텍스트로 저장합니다.

어떤 도움말이나 아이디어 그거?

+0

예 멀티 스레딩을 통해이 작업을 수행 할 수 있지만 쿼리의 의미는 무엇입니까? 게시 할 수 있습니까? –

+0

기본적으로 숫자를 전송합니다 (예 : 1087673). 서버가 전체 이름을 반환합니다. – user2085339

+0

다중 스레드를 사용하면 프로그램이 다음 요청을 시작하기 전에 각 요청이 완료 될 때까지 기다리지 않습니다. 서버가 한 번에 하나의 요청 만 처리 할 수 ​​있기 때문에 이것이 더 빠를 지 알 수 없습니다. –

답변

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 
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())) 

모든 실행 :

이 코드가 될 것입니다.

완료!