下载Open Hardware Monitor的速度

时间:2014-03-17 17:20:57

标签: c# download-speed openhardwaremonitor

我正在对Open Hardware Monitor进行一些更改。我将添加网络适配器下载和上传速度。但是当我计算下载速度时,我得到了错误的计算。

由于OHM中的自动更新,我无法使用计时器来计算正确的下载速度。 在源代码中,您可以看到我如何计算下载速度(以Mb / s为单位)。

在班级的构造中我做:

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;                 
}

希望有人能看到我的问题?

enter image description here

添加了截图

2 个答案:

答案 0 :(得分:1)

我之前的代码存在一些转换问题。 现在我有这个来源,它的工作原理。 Tnx全部用于回答。

    interfaceStats = netInterfaces.GetIPv4Statistics();

        //Calculate download speed
        downloadSpeed.Value = Convert.ToInt32(interfaceStats.BytesReceived - bytesPreviousReceived) / 1024F;

        bytesPreviousReceived = interfaceStats.BytesReceived;

答案 1 :(得分:0)

以下更改应有助于......

speed = netInterfaces.Speed / 1048576L;

如果我没记错的话,Speed属性为long,当您将其除以int时,最终会得到截断结果。这使我们在您的其他计算中发生了类似的更改......

usedDownloadSpeed.Value = ((bytesCalc / time) * 1000L)/1024L;

...假设usedDownloadSpeed.Value也是long,以确保您没有通过隐式转化结果或计算获得任何截断值。如果您想要确保正确进行投射,请使用Convert.ToInt64()