来自 HttpWebRequest 的详细时间信息

Detailed timing info from HttpWebRequest

我正在尝试从 .NET 中通过 HttpWebRequest 发出的 HTTP 请求中提取详细的计时信息,就像 Chrome 中的计时选项卡一样:

有人知道这是否可行吗?除了将整个请求包装在秒表中之外,我找不到任何其他文档。但是我真的很想要详细信息,比如从DNS解析需要多长时间,请求需要多长时间,内容下载等

我建议查看 Miniprofiler https://miniprofiler.com/ and Glimpse http://getglimpse.com/

Glimpse 最好先设置,它会显示很多关于你刚开箱即用的 http 请求的信息,但你可以配置 mini profiler 来发现缓慢的 SQL 查询等。您必须编写一些代码才能让它为您提供详细信息,但它非常擅长向您展示瓶颈所在,并且可以将其与 Glimpse 集成,以便您可以在同一个地方查看所有信息。

好吧,我不确定它是否有帮助,但在 reference source I see references to GlobalLog and Logging. Perhaps you could create your own trace listener to capture the information you need. This post and this answer 中浏览可能对您有用,因为它展示了如何配置跟踪侦听器。

为了将来参考,我正在回答我自己的问题。虽然建议的记录器答案可能有效,但我找到了更好的 (IMO) 和更简单的方法:

var waiting = new Stopwatch();
var contentDownload = new Stopwatch();
waiting.Start();
using (var webResponse = (HttpWebResponse)webRequest.GetResponse())
{
    waiting.Stop();
    contentDownload.Start();
    using (var reader = new StreamReader(webResponse.GetResponseStream()))
    {
        var body = reader.ReadToEnd();
        contentDownload.Stop();
    }
}

就这么简单。调用GetResponse对应Chrome的等待GetResponseStream+ReadToEnd对应内容下载 .

在这个例子中,我发出了一个 GET(无主体)请求。能够计时 请求发送 是有道理的,但使用这种方法并不能真正实现。

使用数据包嗅探器,例如 wire shark,它将监控所有 HTTP 流量并在每个 send/received 数据包上放置时间戳