所以我的一个应用程序从互联网上下载网页。目前我正在使用多个(5)线程来加速网页的下载
for (int i = 0; i < th; i++)
{
Thread thread = new Thread(start);
thread.Start()
}
在start
函数中,我按HtttpWebRequest
和WebResponse
组合下载网页。有什么方法可以加快这个过程。
我正在考虑使用Tasks
而不是线程。它是否会导致任何有意义的速度提升,甚至导致我的PC的资源使用量减少。
非常感谢这里的一些指导。
答案 0 :(得分:0)
来自MSDN:
在幕后,任务排队到ThreadPool,一直是 通过确定和调整数量的算法进行增强 线程并提供负载平衡以最大化吞吐量。这个 使任务相对轻量级,你可以创建它们中的许多 实现细粒度的并行性。
换句话说,使用Tasks很可能会更高效,因为它使用池化线程而不是创建新线程,并且可以自动确定要创建的线程数量,具体取决于它运行的系统 - 5可能不会是所有系统上的最佳线程数。
值得注意的是,默认情况下,只允许两个并发HTTP请求。要增加此值,您需要在发起请求之前更改ServicePointManager.DefaultConnectionLimit的值。
答案 1 :(得分:0)
直接在Task
上使用Thread
可能会让您的代码更容易编写,理解和使用。它不太可能有任何有意义的性能差异,特别是在这样的上下文中。
默认情况下,新任务将使用线程池,并且使用线程池与常规任务之间存在一些性能差异,但鉴于您的任务数量很少且长时间运行,这些差异不会很大在这种情况下的因素。