加快WebRequest的GetResponse?

时间:2019-01-19 18:48:16

标签: c# web-services f#

我有以下代码:

//Send request and get response
let req = WebRequest.Create(Uri("https://www.google.com/))
req.Proxy <- null
req.Method <- WebRequestMethods.Http.Get
use resp = req.GetResponse()

大约需要250毫秒才能收到请求,看起来好像没有那么多。但是我将检查大约200个链接,因此我真的希望减少这个时间。有什么办法可以加快速度吗?

1 个答案:

答案 0 :(得分:1)

您可以使用F#异步工作流程来完成此任务,并使用Async.Parallel来并行处理请求。您还需要设置.NET允许的并行连接数限制,以实际允许更高级别的并行性。像这样:

open System
open System.Net

ServicePointManager.DefaultConnectionLimit <- 20

let checkUrl url = 
  async {
    let req = WebRequest.Create(Uri(url))
    req.Proxy <- null
    req.Method <- WebRequestMethods.Http.Get
    use! resp = req.AsyncGetResponse()
    printfn "Downloaded: %s" url
    return resp.ContentLength }

[ for i in 0 .. 100 -> checkUrl (sprintf "http://www.google.com?%d" i) ]
|> Async.Parallel
|> Async.RunSynchronously