本帖最后由 dongxinxi 于 2011-12-02 12:02:31 编辑

解决方案 »

  1.   

    我用chrome#1尝试是有区别的,不加#n是总的占有率,#n后刷新其他页面cpu占有率零,刷新该页面cpu占有率马上提升。n应该是从0开始
      

  2.   

    多谢你的尝试,昨晚搞到好晚,晕头转向,今天回过头又重新测试了一下
    用string proName = process.ProcessName + (i==0 ? "" : ("#" + i.ToString()));
    pm = new PerformanceCounter("Process", "% Processor Time", proName);
    得到了正确的数据
    我昨晚用这种好像也测试过的,现在竟然可以了
      

  3.   

    由于是定时监控,所以每次new pm是不划算的,弄了个字典来保存计数器。但有的进程可能已经退出,所以仍然需要更新计数器的实例编号
    PerformanceCounter pm = null;
    foreach (var proGroup in processes.GroupBy(p => p.ProcessName))
    {
        for (int i = 0; i < proGroup.Count(); i++)
        {
            var process = proGroup.ElementAt(i);
            try
            {
                string instanceName = process.ProcessName + (i == 0 ? "" : ("#" + i.ToString()));
                if (this.processMonitor.ContainsKey(process.Id))
                {                                
                    pm = this.processMonitor[process.Id];
                    pm.InstanceName = instanceName;  //重要
                }
                else
                {
                    pm = new PerformanceCounter("Process", "% Processor Time", instanceName);
                    this.processMonitor.Add(process.Id, pm);
                    pm.NextValue();
                }
             ...
         }
    }