Поскольку у вас нет контроля над потоком, чтобы сказать ему, сколько прочитано, вы можете отметить время до и после чтения потока, а затем на основе полученных или отправленных байтов вычислить скорость:
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