c# - 如何使用 HttpClient 获得上传速度
问题描述
我正在使用 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 计数器,更准确的方法可以在这里找到:
推荐阅读
- themes - Moodle Moove 儿童主题
- javascript - 识别侧边栏何时处于活动状态
- rust - 我可以避免使用显式生命周期说明符而是使用引用计数(Rc)吗?
- javascript - 如何在 Three.js 中制作多个对象?
- implementation - 异或密码的实现问题
- c# - 使用抽象类作为函数参数
- angular - 为什么 Angular 的英雄之旅 http 错误处理程序接受任何类型的参数?
- python - 如何使用 pytesseract 检测气泡字母数字
- javascript - 如何将用户 uid 从登录页面传递到 Web 应用程序中的不同页面
- javascript - 有没有办法使转换属性适用于 javascript 选定项目?