2012-07-09 120 views
-6

我創建多線程應用程序如下:C#多線程 - 很慢

http://blog.milrr.com/2010/03/code-c-simple-multithreading-example.html

它有很多性能問題。看起來,每個線程都一一執行。

1個線程完成時間爲1-2秒,30個線程完成時間爲35-40秒。

請告訴我什麼是問題。

我正在使用.net框架3.5。

感謝

+3

Tbh,這不是多線程的好例子。它只顯示技術方面,而不是如何正確使用它。多線程不是即時獲勝,它不會神奇地加速你的應用程序。 – Dykam 2012-07-09 09:32:37

+10

請發佈您的代碼,而不是您跟隨的模板的鏈接。 – 2012-07-09 09:33:06

+0

你的機器有多少核心? – 2012-07-09 09:33:20

回答

0

多個線程的I/O操作和在那裏你必須等待資源,或提供更好的用戶體驗,同時等待長時間運行的過程操作是有利的。

但是線程有它自己的開銷,如果沒有正確使用可能會減慢速度。

+2

IMO真正的多線程,在多線程上執行非平凡的代碼,對IO或其他等待操作沒有用處,它只對CPU綁定操作有用。對於IO操作,在主線程上完成事件觸發事件會更好。 – CodesInChaos 2012-07-09 09:45:58

+0

我在機器上有2個核心。我有非常大的代碼,我遵循完全相同的方法,如在URL中。這是正確的方法嗎?任何人都可以發佈網址,我可以看到如何實現多線程,可以給我很好的表現? – 2012-07-09 09:50:53

0

線程來提高性能..

你給的鏈接使用的threads..so你的感覺就像它的緩慢排隊..

但是你可以使用線程,如果他們以平行運行不干預對方..

here爲.NET 4

3.5去herehere等。

1

該示例不會創建30個線程,它會爲線程池創建30個任務。池本身通常會保持它使用的線程數量接近系統中的核心數量。

假設你有2個核心。這意味着池不會計劃同時運行超過2-3個任務,這意味着如果您創建30個任務,那麼您的運行時間將不會比單個線程應用順序運行任務的時間縮短一半。這是有道理的,因爲假設你可以比2核心提升2倍以上的速度(除了一些特殊情況)是荒謬的。

此外,該示例沒有顯示任何有意義的計算。它只是創建一定數量的執行孤立計算的任務。你創造的任務越多,完成的時間就越多,這就是爲什麼你看到增加的運行時間,你創建的任務越多。

簡而言之:

  1. 該博客文章是加快應用程序的壞榜樣(我敢肯定,這不是帖子的目的)。
  2. 如果CPU限制,則創建更多線程將不會加速應用程序。
-1

你可以做這樣的事情,

private List<Thread> myThreads = new List<Thread>(); 

在這裏,你建立線程的列表,以便在那裏你會看執行爲你這樣做存在一個線程,你只需將其添加到上面的列表....

foreeach (Thing i want to start multiple times) 
{ 

var thrd = new Thread(aThread); 

myThreads.Add(aThread); 
aThread.Start(); 

} 

接下來你調用一個方法,將等待線程加入...

WaitUntilAllThreadsComplete(); 

private void WaitUntilAllThreadsComplete() 

     { 
      foreach (Thread t in myThreads) 
      { 
       t.Join(); 
      } 
     } 

像這樣的東西..對不起,它很含糊..但可能有幫助嗎?

-2

簡而言之,線程是邪惡的。您只想在特定情況下和代碼的特定部分中使用線程。已經提到的一個很好的例子是隨機的,令人難以置信的長期任務,一旦執行,與程序的其餘部分完全無關,但需要完成。