Скорость загрузки для Open Hardware Monitor
Я делаю некоторые изменения для Open Hardware Monitor. Я добавлю сетевой адаптер загрузки и скорость загрузки. Но когда я вычисляю скорость загрузки, я получаю неправильный расчет.
Я не могу использовать таймер для расчета правильной скорости загрузки из-за автоматического обновления в ОМ. В исходном коде вы можете посмотреть, как я вычисляю скорость загрузки (в Мбит / с).
В конструкции класса я делаю:
IPv4InterfaceStatistics interfaceStats = netInterfaces.GetIPv4Statistics();
bytesSent = interfaceStats.BytesSent;
bytesReceived = interfaceStats.BytesReceived;
stopWatch = new Stopwatch();
stopWatch.Start();
Когда вызывается метод обновления (в некоторые случайные моменты времени), я делаю это:
IPv4InterfaceStatistics interfaceStats = netInterfaces.GetIPv4Statistics();
stopWatch.Stop();
long time = stopWatch.ElapsedMilliseconds;
if (time != 0)
{
long bytes = interfaceStats.BytesSent;
long bytesCalc = ((bytes - bytesSent)*8);
usedDownloadSpeed.Value = ((bytesCalc / time) * 1000)/1024;
bytesSent = bytes;
}
Надеюсь, кто-то может увидеть мою проблему?
Добавлен скриншот
2 ответа
Там, где несколько проблем с преобразованием моего предыдущего кода. Теперь у меня есть этот источник, и он работает. Tnx всем за ответы.
interfaceStats = netInterfaces.GetIPv4Statistics();
//Calculate download speed
downloadSpeed.Value = Convert.ToInt32(interfaceStats.BytesReceived - bytesPreviousReceived) / 1024F;
bytesPreviousReceived = interfaceStats.BytesReceived;
Следующие изменения должны помочь...
speed = netInterfaces.Speed / 1048576L;
Если я правильно помню, Speed
собственность long
и когда вы делите его на int
, вы в конечном итоге с усеченным результатом. Что приводит нас к аналогичному набору изменений в других ваших расчетах...
usedDownloadSpeed.Value = ((bytesCalc / time) * 1000L)/1024L;
... при условии, что usedDownloadSpeed.Value
также long
чтобы убедиться, что вы не получаете никаких усеченных значений с неявным преобразованием ваших результатов или расчетов. Если вы хотите быть вдвойне уверенным в правильности кастинга, используйте Convert.ToInt64()
,