如何使用 HttpClient class c# 获取第一个字节的时间
How to get time to first byte with HttpClient class c#
这是我目前用来调用 api 的代码,其中 api
是传递给函数的字符串。 httpClient 的设置是在方法之外预先完成的。
HttpResponseMessage response = await httpClient.GetAsync(api);
String strResp = await response.Content.ReadAsStringAsync();
httpClient.DefaultRequestHeaders.Accept.Clear();
有没有一种方法可以使用此代码跟踪诸如首字节时间 (TTFB) 之类的指标,或者我必须走另一条路吗?
您应该能够将 HttpClient.GetAsync(string requestUri, HttpCompletionOption completionOption)
方法与 HttpCompleteOption.ResponseHeadersRead
一起使用。这应该 return HttpResponseMessage 一旦 header 被读取(不完全是 TTFB - "Time to first byte",而是 TTHR - "Time till header read")
然后你可以用秒表测量这个时间:
sw = new Stopwatch();
sw.Start();
HttpResponseMessage response = await httpClient.GetAsync(api);
sw.Stop();
Console.WriteLine("TTFB: " + sw.EleapsedMilliseconds)
String strResp = await response.Content.ReadAsStringAsync();
但是由于这段代码的并行性质,这也很不可靠。
In this post 有人建议将 WebClient
及其 DownloadProgressChanged
与 'StopWatch'.
结合使用
最终使用 Telerik 的 FiddlerCore 来获取 TTFB 和加载其他有用的指标。
这是我目前用来调用 api 的代码,其中 api
是传递给函数的字符串。 httpClient 的设置是在方法之外预先完成的。
HttpResponseMessage response = await httpClient.GetAsync(api);
String strResp = await response.Content.ReadAsStringAsync();
httpClient.DefaultRequestHeaders.Accept.Clear();
有没有一种方法可以使用此代码跟踪诸如首字节时间 (TTFB) 之类的指标,或者我必须走另一条路吗?
您应该能够将 HttpClient.GetAsync(string requestUri, HttpCompletionOption completionOption)
方法与 HttpCompleteOption.ResponseHeadersRead
一起使用。这应该 return HttpResponseMessage 一旦 header 被读取(不完全是 TTFB - "Time to first byte",而是 TTHR - "Time till header read")
然后你可以用秒表测量这个时间:
sw = new Stopwatch();
sw.Start();
HttpResponseMessage response = await httpClient.GetAsync(api);
sw.Stop();
Console.WriteLine("TTFB: " + sw.EleapsedMilliseconds)
String strResp = await response.Content.ReadAsStringAsync();
但是由于这段代码的并行性质,这也很不可靠。
In this post 有人建议将 WebClient
及其 DownloadProgressChanged
与 'StopWatch'.
最终使用 Telerik 的 FiddlerCore 来获取 TTFB 和加载其他有用的指标。