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

时间:2015-05-05 19:00:21

标签: c# performancecounter

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

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

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

2 个答案:

答案 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();
    }
}