小编Hag*_*hen的帖子

C# HttpClient 响应时间分解

我正在尝试使用运行.net 6HttpClient客户端来测量特定请求的服务器响应时间。

在调用之前放置秒表GetAsync通常会在120-140毫秒之间返回。

Url在浏览器(Chrome 和 FireFox、开发人员工具上的网络选项卡)上检查 Same 大约会在30-40毫秒后正常返回。

查看服务器日志通常显示20-25毫秒。(仅显示纯服务器响应时间)

我认为造成巨大差距的原因是因为在我的HttpClient测量中我还计算了 DNS 查找、TLS 握手等。

使用 Curl 我可以得到时间的细分:

time_namelookup:  0.003154s
time_connect:  0.049069s
time_appconnect:  0.121174s
time_pretransfer:  0.121269s
time_redirect:  0.000000s
time_starttransfer:  0.170894s
time_total:  0.171033s
Run Code Online (Sandbox Code Playgroud)

我可以使用 C# 执行这种时间分解吗HttpClient?

DelegatingHandler我在使用和放置Stopwatchbefore方面取得了一些进展SendAsync。(比总时间少了大约 5 毫秒 - 我猜是在 dns 查找之后)

我发现关于此的文档很少,有什么指示吗?

提前致谢。

c# httpclient .net-core

6
推荐指数
1
解决办法
1362
查看次数

ASP.NET Core 6 中的非缓冲输出

我正在尝试使用真正基本的 ASP.NET Core 6 应用程序实现简单的流(非缓冲输出)。

以下简单代码应将 hello world 文本输出到客户端,然后关闭连接(甚至通过添加文档IHttpResponseBodyFeature选项):

app.MapGet("/a", async (ctx) =>
{
    var gg = ctx.Features.Get<Microsoft.AspNetCore.Http.Features.IHttpResponseBodyFeature>()!;
    gg.DisableBuffering();    
    await ctx.Response.Body.WriteAsync(Encoding.UTF8.GetBytes("Hello, World!"));
    await ctx.Response.Body.FlushAsync();        
    await Task.Delay(2000);
});
Run Code Online (Sandbox Code Playgroud)

这当然是我试图实现的行为的一个简单示例。

对应用程序的简单curl 请求可以显示hello world 文本仅在等待2 秒后才到达客户端。

在 .NET Framework 上,以下代码按预期工作:

Response.Clear();
Response.Buffer = false;
Response.BufferOutput = false;
Response.Output.WriteLine("Hello World!");
Response.Output.Flush();
System.Threading.Tasks.Task.Delay(2000).Wait();
Response.End();
Run Code Online (Sandbox Code Playgroud)

简单的curl请求会立即显示“hello world”文本,2秒后连接关闭。

提前致谢。

c# asp.net asp.net-core

5
推荐指数
1
解决办法
2288
查看次数

标签 统计

c# ×2

.net-core ×1

asp.net ×1

asp.net-core ×1

httpclient ×1