gpt4 book ai didi

c# - 如何让时间到达 WebResponse 的第一位?

转载 作者:行者123 更新时间:2023-11-30 15:38:56 25 4
gpt4 key购买 nike

使用 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;

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

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

最佳答案

如果您只想了解在线路上请求和响应之间的延迟,请使用网络数据包嗅探器,例如 Fiddler。与进程内计时器相比,我对来自数据包级别工具的计时数字更有信心。由于包含 .net 堆栈开销,进程内测量可能会略有偏差。如果您想知道服务器响应的速度有多快,那么您不想包括客户端开销。

关于c# - 如何让时间到达 WebResponse 的第一位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10964610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com