3

该特定字段返回什么?我想要每秒接收的字节数。我应该依靠这个吗?

4

3 回答 3

9

我认为你可以这样使用它:

long beginValue = NetworkInterface.GetIPv4Statistics().BytesReceived;
DateTime beginTime = DateTime.Now;

// do something

long endValue = NetworkInterface.GetIPv4Statistics().BytesReceived;
DateTime endTime = DateTime.Now;

long recievedBytes = endValue - beginValue;
double totalSeconds = (endTime - beginTime).TotalSeconds;

var bytesPerSecond = recievedBytes / totalSeconds;

定期更新的代码片段

private object _lockObj;
private long bytesPerSecond = 0;
private Timer _refreshTimer = new Timer { Interval = 1000 };

// do in ctor or some init method
_refreshTimer.Tick += _refreshTimer_Tick;
_refreshTimer.Enabled = true;

private void _refreshTimer_Tick(object sender, EventArgs e)
{
  ThreadPool.QueueUserItem(callback => 
  {
    long beginValue = NetworkInterface.GetIPv4Statistics().BytesReceived;
    DateTime beginTime = DateTime.Now;

    Thread.Sleep(1000);

    long endValue = NetworkInterface.GetIPv4Statistics().BytesReceived;
    DateTime endTime = DateTime.Now;

    long recievedBytes = endValue - beginValue;
    double totalSeconds = (endTime - beginTime).TotalSeconds;

    lock(_lockObj)
    {
      bytesPerSecond = recievedBytes / totalSeconds;
    }
  });

}

您可以将此与一些跟踪相结合,以记录一段时间内收到的字节数

于 2012-11-27T07:58:55.773 回答
4
NetworkInterface.GetIPv4Statistics().BytesReceived 

将显示给定接口接收到的总字节数。

我认为您不能完全使用它来获取每秒接收的字节数。

检查这个

于 2012-11-27T07:53:55.383 回答
0

http://msdn.microsoft.com/en-us/library/system.net.networkinformation.ipv4interfacestatistics.bytesreceived.aspx

根据 MSDN(正如其他人也指出的那样),它获取在接口上接收到的字节数。

例如,如果网络接口断开并重新连接(例如,网络电缆被拔出或无线连接断开),它将如何表现。

如果您想要一种更可靠的方法来捕获数据包、过滤它们、剖析它们并只计算重要的数据包,那么请查看http://sourceforge.net/projects/sharppcap/

于 2012-11-27T08:26:33.263 回答