【发布时间】:2012-07-24 09:15:25
【问题描述】:
我有大约一百万个指向公共 Web 服务器上的 HTML 页面的 URL,我想将它们保存到我的磁盘中。每一个的大小都差不多,大约 30 KB。我的 url 列表在磁盘上的 20 个文件夹中平均分布,因此为简单起见,我为每个文件夹创建一个 Task,并且在每个任务中,我依次下载一个 URL 一个接一个。所以这随时给我大约 20 个并行请求。我在一个相对糟糕的 DSL 上,5mbps 连接。
这代表了数 GB 的数据,因此我预计该过程需要几个小时,但我想知道是否可以使该方法更有效。我是否有可能充分利用我的联系?我该如何衡量呢? 20 次并行下载是一个好数字还是我应该向上或向下拨号?
语言是 F#,我为每个 url 使用 WebClient.DownloadFile,每个任务一个 WebClient。
===================================
编辑:产生巨大差异的一件事是在请求中添加了某个标头:
let webClient = new WebClient()
webClient.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate")
这将下载大小从大约 32k 减少到了 9k,从而极大地提高了速度并节省了磁盘空间。感谢 TerryE 提及!
【问题讨论】:
-
默认情况下,.net 每个服务器的连接限制为 2。如果您想要更多并行下载,则需要更改它。
标签: .net performance optimization