2013-10-12 144 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

感谢您的回答。 –