gpt4 book ai didi

c# - 是否可以获取从 http 响应(包括 header )收到的总字节数?

转载 作者:可可西里 更新时间:2023-11-01 17:07:29 27 4
gpt4 key购买 nike

对于一项学校作业,我必须证明下载一个 1mb 的文件 100 次比下载一个 100mb 的文件一次要慢。

理论是:下载一个 1mb 的文件 100 次需要更多的总字节数,因为与它一起发送的 header 。

现在我编写了一个脚本来为这两种情况计时并将其显示在控制台中。但是,我想显示收到的总字节数,以说明为什么需要更长的时间。

这是我目前所拥有的:

class TestClass
{
private Stopwatch timer;
private WebClient downloader;
private TimeSpan elapsed;
private string elapsedTime;

public void SetUp()
{
timer = new Stopwatch();
downloader = new WebClient();
}

public void StartTest()
{
Console.WriteLine("Starting test");
Console.WriteLine("Downloading 1mb file x100, please wait...");
timer.Start();
for (int i = 0; i < 100; i++)
{
downloader.DownloadFile("http://ftp.telfort.nl/pub/test/1megabyte.bin", @"c:\tempdownload\1mb.txt");
}

timer.Stop();
elapsed = timer.Elapsed;

// Format and display the TimeSpan value.
elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
elapsed.Hours, elapsed.Minutes, elapsed.Seconds,
elapsed.Milliseconds / 10);

Console.WriteLine("RunTime when downloading 1MB 100 times is: " + elapsedTime);

// Now go for 100MB
timer.Reset();
Console.WriteLine("Downloading 100mb file 1x, please wait...");
timer.Start();
downloader.DownloadFile("http://ftp.telfort.nl/pub/test/100megabyte.bin", @"c:\tempdownload\100mb.txt");
timer.Stop();

elapsed = timer.Elapsed;

// Format and display the TimeSpan value.
elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
elapsed.Hours, elapsed.Minutes, elapsed.Seconds,
elapsed.Milliseconds / 10);
Console.WriteLine("RunTime when downloading 100MB 1 time is: " + elapsedTime);

// Finally
Console.WriteLine("Press any key to continue...");
Console.ReadKey();
}
}

有没有办法做到这一点?

编辑:我认为标题可能具有误导性......

最佳答案

所以你想测量整个响应的大小。

BCL 提供的 HTTP 类(HttpWebResponse、WebClient、HttpClient)无法提取整个请求或响应消息大小(包括状态行、响应 header 和消息正文)。

您可以通过计算 header 的名称和值的长度来模拟这一点,但是由于将多个 header 折叠和压缩到一个字典条目中,这将不完全准确。

不过,您可以使用套接字轻松地发出简单的 HTTP GET 请求,并简单地发出 HTTP/1.0 请求让服务器在发送整个响应后关闭连接(这样您就不必重新实现 HTTP 客户端通过套接字)。

但是 header 不是您的问题。对于一个 1 MB 的文件,超过 100 个 HTTP 请求,请求和响应 header 将占每个请求大约 150 个字节,或者对于 100 MB 有效负载的总传输来说,边际 15 KB。

真正的延迟将由 100 个独立的 TCP 连接的创建及其典型的慢启动引起。

关于c# - 是否可以获取从 http 响应(包括 header )收到的总字节数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35581264/

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