【发布时间】:2012-11-14 19:06:51
【问题描述】:
该特定字段返回什么?我想要每秒接收的字节数。我应该依赖这个吗?
【问题讨论】:
标签: c# .net networking ip
该特定字段返回什么?我想要每秒接收的字节数。我应该依赖这个吗?
【问题讨论】:
标签: c# .net networking ip
我认为你可以这样使用它:
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;
}
});
}
您可以将此与一些跟踪相结合,以记录一段时间内收到的字节数
【讨论】:
_lockObj 无论如何它也可以在没有它的情况下工作。我正在使用它进行自己的修改。谢谢。
【讨论】:
根据 MSDN(正如其他人也指出的那样)它获取在接口上接收到的字节数。
例如,如果网络接口断开并重新连接(例如,网络电缆被拔出或无线连接断开),它将如何表现。
如果您想要一种更可靠的方法来捕获数据包、过滤数据包、剖析数据包并只计算重要的数据包,请查看http://sourceforge.net/projects/sharppcap/
【讨论】: