1

我正在对 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;                 
}

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

在此处输入图像描述

添加截图

4

2 回答 2

1

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

    interfaceStats = netInterfaces.GetIPv4Statistics();

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

        bytesPreviousReceived = interfaceStats.BytesReceived;
于 2014-03-29T15:05:17.780 回答
0

以下更改应该会有所帮助...

speed = netInterfaces.Speed / 1048576L;

如果我没记错的话,Speed属性是 a long,当你将它除以a 时int,你最终会得到一个截断的结果。这使我们在您的其他计算中遇到了类似的一组变化......

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

...假设这usedDownloadSpeed.Value也是long为了确保您没有通过结果或计算的隐式转换获得任何截断值。如果您想加倍确定您的投射正确,请使用Convert.ToInt64().

于 2014-03-18T16:55:59.140 回答