2013-10-12 188 views
0

所以我的一個應用程序從互聯網上下載網頁。我目前使用多個(5)的螺紋,以加快網頁加速從互聯網下載網頁

for (int i = 0; i < th; i++) 
{ 
    Thread thread = new Thread(start); 
    thread.Start() 
} 

的下載,並在start功能我被HtttpWebRequestWebResponse組合下載網頁。有什麼辦法可以加快這個過程。

我想用Tasks而不是線程。它會導致我的PC的速度有任何有意義的增加,甚至會降低資源使用率。

真的很感謝這裏的一些指導。

+0

你看到了嗎? http://stackoverflow.com/questions/13429129/task-vs-thread-diffrences – nha

+0

幾乎可以肯定,你的大部分時間都花在下載本身上。限制因素是數據從這些Web服務器傳輸到您的計算機的速率。顯式託管的線程和任務之間的性能差異最多爲毫秒。假設你正確使用它們,你會發現兩者之間沒有明顯的區別。 –

回答

0

MSDN

在幕後,任務被排隊到線程池,這一直是 增強與確定和調整到的 線程的數目和提供負載平衡,以最大化吞吐量的算法。這個 使任務相對輕量級,你可以創建其中的許多到 啓用細粒度的並行。

換句話說,使用任務最有可能效率更高,因爲它使用池線程而不是創建新線程,並且可以根據運行的系統自動確定創建多少個線程 - 5可能不是所有系統上的最佳線程數。

值得注意的是,默認情況下,只允許兩個併發HTTP請求。爲了提高這一點,您需要在啓動請求之前更改ServicePointManager.DefaultConnectionLimit的值。

+1

與執行多個網絡請求所需的時間相比,啓動新線程所用的時間量較長。差異可能是完全可以忽略不計的。此外,線程池*不應該用於長時間運行的任務,例如像這樣的長網絡請求;他們應該用於短期任務。目標可能需要啓動新的任務來處理這個問題。生活在欠發達國家的 – Servy

+0

我的連接速度僅爲1mbps。然而,我不知道只有兩個連接的限制。我會增加限制,並檢查是否有任何區別。 –

0

直接使用Task而不是Thread可以使您的代碼更容易爲您編寫,理解和使用。它不可能有任何有意義的性能差異,特別是在這樣的背景下。

默認情況下,新任務將使用線程池,並且在使用線程池和常規任務之間存在一些性能差異,但考慮到您的任務數量很少,並且長時間運行,這些差異不會是在這種情況下的大因素。

+0

一個愚蠢的問題。例如,如果我想要多個併發的HTTP請求,我做了多個線程。對於任務,我應該做多個任務還是有其他事情我可以做? –

+0

@WinCoder您可以完成多項任務。 – Servy

+0

感謝您的回答。 –