【问题标题】:Check response time with HTTPWebRequest?使用 HTTPWebRequest 检查响应时间?
【发布时间】:2011-10-25 18:17:00
【问题描述】:

我正在尝试查找我的一些代理的性能。我在.net 中尝试了Ping 类,但它不接受端口。有没有办法检查httpwebrequest 的回复需要多长时间?

【问题讨论】:

    标签: c# .net httpwebrequest


    【解决方案1】:
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(myUri);
    System.Diagnostics.Stopwatch timer = new Stopwatch();
    
    timer.Start();
    
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    response.Close ();
    
    timer.Stop();
    
    TimeSpan timeTaken = timer.Elapsed;
    

    【讨论】:

    • 如果启动后备线程有延迟,这是不准确的。我遇到过这种情况,在您提出请求和实际提出请求之间存在延迟。如果您尝试使用多个同时的 HttpWebRequest 对某些内容进行压力测试,这一点非常明显。这是因为支持 ThreadPool。
    • 如何循环执行? foreach (DataRow dr in dt.Rows) { ........ }
    【解决方案2】:

    为什么不直接从客户端计时呢?

    WebRequest request = BuildRequest();
    Stopwatch sw = Stopwatch.StartNew();
    using (WebResponse response = request.GetResponse())
    {
        // Potentially fetch all the data here, in case it's streaming...
    }
    sw.Stop();
    Console.WriteLine("Request took {0}", sw.Elapsed);
    

    【讨论】:

    • 如果启动后备线程有延迟,这是不准确的。我遇到过这种情况,在您提出请求和实际提出请求之间存在延迟。如果您尝试使用多个同时 HttpWebRequest 对某些内容进行压力测试,这一点非常明显。这是因为支持 ThreadPool。
    • @Xenophile:哪个“支持线程”?显示的代码都不会 启动新线程。有一个 connection 池(默认情况下)只允许四个并发连接到同一主机 - 你是这么想的吗?
    • @Xenophile:我不知道 IO 完成端口背后的确切细节,但我认为连接时间更多可能很重要。与建立 TCP 连接的成本相比,创建线程的成本非常小——而且线程无论如何都是池化的。
    • @Xenophile:此外,您所说的“不准确”是什么意思?如果在测试中设置它有延迟,那么“真实”客户端代码可能会有类似的延迟。当然,客户端测试只能正确地测试完整的往返时间。
    • @hellboy:根据我的回答,你会使用Stopwatch。我不确定我明白你在问什么......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-13
    • 2023-04-07
    相关资源
    最近更新 更多