其他分享
首页 > 其他分享> > CodeGo.net>如何获取时间到WebResponse的第一位?

CodeGo.net>如何获取时间到WebResponse的第一位?

作者:互联网

使用C#,我需要确定开始从WebRequest接收响应所花费的时间(目前,我不担心下载完整响应所花费的时间).

据我了解,要做到这一点,我需要使用WebRequest的异步方法.这是我想出的:

public TimeSpan TimeToFirstBit(string url)
{
  HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  request.Accept = "*/*";

  DateTime? firstBit = null;
  DateTime start = DateTime.Now;

  IAsyncResult asyncResult = request.BeginGetResponse(
      (async) => { firstBit = DateTime.Now; },
      null);

  asyncResult.AsyncWaitHandle.WaitOne();
  request.EndGetResponse(asyncResult);

  TimeSpan result = start - firstBit.Value; 
  // Previous line generates a System.InvalidOperationException: 
  // "Nullable object must have a value."

  return result;

}

这导致“可为空的对象必须具有一个值”.这似乎表明WaitOne()和EndGetResponse方法实际上并没有在等待异步调用完成,正如我认为的那样.

那么,如何等待BeginGetResponse()完成?这确实是确定请求响应时间的正确方法吗?

解决方法:

如果您只想知道网络上请求和响应之间的延迟,请使用诸如Fiddler之类的网络数据包嗅探器.与使用进程内计时器相比,我对来自数据包级工具的时序图更有信心.通过包括.net堆栈开销,进程中的测量可能会略有偏差.如果您想知道服务器响应的速度,则您不希望包括客户端开销.

标签:httpwebresponse,httpwebrequest,c,net
来源: https://codeday.me/bug/20191101/1982039.html