0

所以我的一个应用程序从互联网下载网页。目前我正在使用多个(5)线程来加速网页的下载

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

start功能中,我通过HtttpWebRequestWebResponse组合下载网页。有什么办法可以加快这个过程。

我正在考虑使用Tasks而不是线程。它是否会导致任何有意义的速度提高,甚至会减少我的 PC 的资源使用量。

非常感谢这里的一些指导。

4

2 回答 2

0

来自MSDN

在幕后,任务排队到 ThreadPool,该线程池已通过确定和调整线程数量并提供负载平衡以最大化吞吐量的算法进行了增强。这使得任务相对轻量级,您可以创建许多任务以启用细粒度并行性。

换句话说,使用任务很可能会更有效,因为它使用池线程而不是创建新线程,并且可以根据运行的系统自动确定要创建多少线程 - 5 可能不是最佳的所有系统上的线程数。

值得注意的是,默认情况下,只允许两个并发 HTTP 请求。要增加此值,您需要在启动请求之前更改ServicePointManager.DefaultConnectionLimit的值。

于 2013-10-14T20:57:57.760 回答
0

直接使用TaskoverThread可以使你们的代码更容易编写、理解和使用。它不太可能有任何有意义的性能差异,尤其是在这样的环境中。

默认情况下,新任务将使用线程池,使用线程池与常规任务之间存在一些性能差异,但鉴于您的任务数量少且运行时间长,这些差异不会成为影响的大因素案子。

于 2013-10-14T21:04:00.303 回答