最近在做一个项目需要收集计算机的性能数据,例如 cpu,iops,内存,网络等等,我是用的C#。
我现在采用的方法是PerformanceCounter这个类去创建计数器实例,然后通过NextValue()获取相应的值,获取整体的性能数据还好说。
在收集进程的性能数据遇到了一些问题,因为进程的性能计数器非常多,导致获取一次进程性能数据的cpu占用高达20%,获取一次的时间需要五六秒的时间。
我看任务管理器里面实时获取所有进程的性能数据所占用的cpu并不高,通过计算机管理->性能里面添加计数器进行监视所占用的cpu也不高,有谁知道这是如何实现的吗?或者有谁做过相应的开发和研究,能够提供一些思路。
http://www.cnblogs.com/lemony/archive/2007/04/11/708309.html
因为 任务管理器 实现的方式,可能不是调用你所说的 API,而是系统本身一些信息的汇总。
想要效率高,最好是能从驱动一级直接获取。使用高级语言的 API,可以分析一下效率低是因为什么代码引起的。如果是系统的 API,那就没有可改进的。