首页 > 解决方案 > 如何使用 HttpClient 获得上传速度

问题描述

我正在使用 HttpClient 将字节数组发布到服务器。我如何知道每秒传输了多少字节?

标签: c#httpclient

解决方案


最简单、幼稚的方法是使用Stopwatch类来获取调用前后的时间间隔HttpClient.PostAsync,然后将该时间除以有效负载大小:

byte[] payload = GetData();
var content = new ByteArrayContent(payload);
var stopwatch = Stopwatch.Start();
await httpClient.PostAsync(url, content);
stopwatch.Stop();
var bps = payload.Length / stopwatch.Elapsed.TotalSeconds;

这是一个原始方法,因为它不计算实际字节通过网络接口所花费的时间,而是计算 HttpClient 类执行 POST 操作所花费的总时间,包括分配内存、旋转必要时启动线程,异步/等待操作的机制等等。但是,在大多数情况下,这些都明显比实际的 I/O 快,因此它可能可以忽略不计 - 这取决于您需要的结果有多准确。

可以使用 NetworkInterface 类来检查 BytesSent 计数器,更准确的方法可以在这里找到:


推荐阅读