我需要监控所有互联网流量并收集下载的字节数。
我试图使用性能计数器,但它没有获得当前值,而是只显示0.当我使用以前设置的实例名称时,它可以工作,但是当我试图迭代所有这些时值不会更新
static PerformanceCounterCategory category = new PerformanceCounterCategory("Network Interface");
String[] instances = category.GetInstanceNames();
double bytes;
private void updateCounter()
{
foreach (string name in instances)
{
PerformanceCounter bandwitchCounter = new PerformanceCounter("Network Interface", "Bytes Received/sec", name);
bytes += bandwitchCounter.NextValue();
textBox1.Text = bytes.ToString();
}
}
现在,当我关闭定时器时,实例名称会更改但不会更改值
答案 0 :(得分:3)
这是一个费率计数器。第一次读取速率计数器(通过调用NextValue)时,它返回0.后续读取将计算自上次调用NextValue以来的速率。
由于每次都创建一个新的PerformanceCounter对象,NextValue将始终返回0.
您可以通过查看RawValue来获取所需的信息。
答案 1 :(得分:1)
我会自己回答。正如OldFart所提到的,每次我每次将计数器重置为0时都会调用新对象。我设法通过先前创建所有实例的列表并稍后迭代它来处理此问题。像这样:
List<PerformanceCounter> instancesList = new List<PerformanceCounter>();
private void InitializeCounter(string[] instances)
{
foreach(string name in instances)
{
instancesList.Add(new PerformanceCounter("Network Interface", "Bytes Received/sec", name));
}
}
private void updateCounter()
{
foreach(PerformanceCounter counter in instancesList)
{
bytes += Math.Round(counter.NextValue() / 1024, 2);
textBox1.Text = bytes.ToString();
}
}