3

その特定のフィールドは何を返しますか? 1 秒あたりの受信バイト数が必要です。これに頼るべきですか?

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 

特定のインターフェイスで受信した合計バイト数が表示されます。

これを正確に使用して、1秒あたりの受信バイト数を取得できるとは思いません。

これをチェック

于 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 に答える