性能监视器 - 获取当前下载的字节数

performance monitor - getting current downloaded bytes

我需要监控所有互联网流量并收集下载的字节数。

我正在尝试使用性能计数器,但它没有获得当前值,而是只显示 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();
    }   
}

现在,当我关闭计时器时,实例名称会更改,但值不会更改

这是一个汇率计数器。第一次读取速率计数器(通过调用 NextValue)时,它 returns 0。后续读取将计算自上次调用 NextValue 以来的速率。

由于您每次都创建一个新的 PerformanceCounter 对象,因此 NextValue 将始终 return 0。

您也许可以通过查看 RawValue 来获取所需的信息。

我会自己回答。正如 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();
    }
}