我想测量当前的下载速度。我正在通过 TCP 发送巨大的文件。我怎样才能捕获每秒的传输速率?如果我使用 IPv4InterfaceStatistics 或类似方法,我将捕获设备传输速率,而不是捕获文件传输速率。捕获设备传输速率的问题在于,它捕获通过网络设备的所有正在进行的数据,而不是我传输的单个文件。
我如何捕获文件传输率?我正在使用 c#。
由于您无法控制流来告诉他读取了多少数据,因此您可以在流读取之前和之后添加时间戳,然后根据接收或发送的字节计算速度:
using System.IO;
using System.Net;
using System.Diagnostics;
// some code here...
Stopwatch stopwatch = new Stopwatch();
// Begining of the loop
int offset = 0;
stopwatch.Reset();
stopwatch.Start();
bytes[] buffer = new bytes[1024]; // 1 KB buffer
int actualReadBytes = myStream.Read(buffer, offset, buffer.Length);
// Now we have read 'actualReadBytes' bytes
// in 'stopWath.ElapsedMilliseconds' milliseconds.
stopwatch.Stop();
offset += actualReadBytes;
int speed = (actualReadBytes * 8) / stopwatch.ElapsedMilliseconds; // kbps
// End of the loop
你应该把Stream.Read
in a try/catch
并处理读取异常。写入流并计算速度是相同的,只是这两行受到影响:
myStream.Write(buffer, 0, buffer.Length);
int speed = (buffer.Length * 8) / stopwatch.ElapsedMilliseconds; // kbps
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)