Если ваш вопрос «как рассчитать скорость передачи данных», вы можете разделить общее количество загруженных байт в общей сложности количество прошедших секунд.
bytes
--------- = transfer rate
seconds
Хороший способ измерения времени в C# является StopWatch класс, а с K в компьютерной науке является 1024 (или 2^10), вы можете разделить число байтов с 1024 (или переместить его), а затем разделите его на количество секунд, необходимое для загрузки этого количества килобайт.
Если вас интересует средняя скорость передачи данных, вам необходимо измерить загруженные байты в интервалы. Вы можете сделать это с двухмерным списком, удерживая точки измерения и загруженные байты и время, которое потребовалось. Для простоты, разбить его из класса в том, что делает расчеты
private readonly Stopwatch watch;
private readonly long[,] average;
public .ctor() {
// use 10 measure points, for a larger or smaller average, adjust the 10
average = new long[10, 2];
watch = Stopwatch.StartNew();
}
public long BytesTransferred {
set {
for (int i = average.GetLength(0) - 1; i > 0; --i) {
average[i, 0] = average[i - 1, 0];
average[i, 1] = average[i - 1, 1];
}
average[0, 0] = sent = value;
average[0, 1] = watch.ElapsedMilliseconds;
}
}
public long TransferRate {
get {
int l = average.GetLength(0) - 1;
double bytes = average[0, 0] - average[l, 0];
double seconds = (average[0, 1] - average[l, 1])/1000d;
return (long)(bytes/seconds);
}
}
В вашем методе загрузки, перерыв нового потока, создать экземпляр указанного класса, и вызвать BytesTransferred = totalBytes;
в каждом интервале. TransferRate будет рассчитываться каждый раз, когда вы вызываете TransferRate. Обратите внимание, что это байты/, если вы хотите другой блок, разделите его на 1024 соответственно.
kbps = kilobytes/second, поэтому 'StopWatch' и счетчик загруженных байтов,' (bytes/1024)/watch.Elapsed.TotalSeconds' ... – Patrick
Действительно. В этой статье есть * много лишней информации. –
@caesay Мне тоже нет, но что вы собираетесь делать ...:/ –