2

我想测量当前的下载速度。我通过 tcp 发送大文件。我如何捕获每秒的传输速率?如果我使用 IPv4InterfaceStatistics 或类似方法,而不是捕获文件传输率,我会捕获设备传输率。捕获设备传输率的问题在于它通过网络设备捕获所有正在进行的数据,而不是我传输的单个文件。

如何捕获文件传输速率?我正在使用 c#。

4

1 回答 1

2

由于您无法控制流来告诉他读取了多少,因此您可以在流读取之前和之后加上时间戳,然后根据接收或发送的字节计算速度:

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放入try/catch并处理读取异常。写入流和计算速度是一样的,只是这两行受到影响:

myStream.Write(buffer, 0, buffer.Length);
int speed = (buffer.Length * 8) / stopwatch.ElapsedMilliseconds; // kbps
于 2011-01-09T21:38:35.597 回答