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堆栈开销,进程中的测量可能会略有偏差.如果您想知道服务器响应的速度,则您不希望包括客户端开销.

上一篇:C#中的getResponse无法正常工作.没有回应回来


下一篇:异常处理-System.IO.IOException: 由于远程方已关闭传输流,身份验证失败