C# 如何获得WebResponse上第一位的时间?
使用C#,我需要确定从WebRequest开始接收响应所需的时间(目前,我并不担心下载完整响应所需的时间) 据我所知,要做到这一点,我需要使用WebRequest的异步方法。以下是我的想法:C# 如何获得WebResponse上第一位的时间?,c#,.net,httpwebrequest,httpwebresponse,C#,.net,Httpwebrequest,Httpwebresponse,使用C#,我需要确定从WebRequest开始接收响应所需的时间(目前,我并不担心下载完整响应所需的时间) 据我所知,要做到这一点,我需要使用WebRequest的异步方法。以下是我的想法: public TimeSpan TimeToFirstBit(string url) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Accept = "*/*"; DateTime? fir
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;
}
这将导致“Nullable对象必须有一个值”。这似乎表明WaitOne()和EndGetResponse方法实际上并没有像我认为的那样等待异步调用完成
那么如何等待BeginGetResponse()完成呢?这确实是确定请求响应时间的正确方法吗?如果您只想知道请求和响应之间的延迟,请使用网络数据包嗅探器,如Fiddler。我对来自数据包级工具的计时数据比来自进程内计时器的计时数据更有信心。进程内测量可能会因包含.net堆栈开销而略有偏差。如果您想知道服务器响应的速度有多快,您不想包括客户端开销。您不能使用WebClient类吗?它有一个您可以处理的DownloadProgressChanged事件。您使用异步功能毫无意义。是否立即等待异步结果?那么它就不是异步的了。@Adriano-我会研究一下的,谢谢。usr-我对异步执行该操作不感兴趣,它似乎只是获取我所需信息的必要手段。@James,您的回调被调用的时间与对GetResponse的调用(同步)返回的时间完全相同。没有区别。这完全是虚无。@user-很高兴知道,谢谢!非常感谢。是否有可能将数据包级别的监控/计时分层到我现有的代码中(这不仅仅是检查服务器响应时间)?我会检查Fiddler是否有API。FiddlerCore可能就是您要找的。