性能计数器的问题。

问题描述

请教各位大侠,我定义了如下计数器求某个进程ProcessName的cpu和内存使用率:PerformanceCounterCpuPercetageTime=newPerformanceCounter("Processor","%ProcessorTime",ProcessName);PerformanceCounterVMSize=newPerformanceCounter("Process","PrivateBytes",ProcessName);PerformanceCounterVirtualBytes=newPerformanceCounter("Process","VirtualBytes",ProcessName);PerformanceCounterMemUsage=newPerformanceCounter("Process","WorkingSet",ProcessName);cpu和内存使用率的采样值我用如下代码实现:data[0]=CpuPercetageTime.NextValue().ToString()+"%";data[1]=(VMSize.NextValue()/1024).ToString()+"K";data[2]=(VirtualBytes.NextValue()/1024).ToString()+"K";data[3]=(MemUsage.NextValue()/1024).ToString()+"K";但是,data[0]的值出现了120%的情况,这是不合理的,那到底该怎么才能正确求得某个进程的cpu使用情况呢?还有cpu总的使用率是用如下的计数器来定义吧?PerformanceCounterCpuPercetageTime=newPerformanceCounter("Processor","%ProcessorTime","_Total");PS:如果用WMI只能求得某一点的情况,不能实时获得数据,不是我想要的,我想实时获得这些值,每隔0.1秒采样一次,所以用了NextValue()来获取,请问还有更好的办法吗?请各位大侠们帮忙啊,谢谢了:)

解决方案

解决方案二:
个人感觉这玩意不是很好用,顺便问下,你知道怎么获得计算机总共内存吗
解决方案三:
publicclassMemoryManager{[DllImport("kernel32")]publicstaticexternvoidGlobalMemoryStatus(refMEMORY_INFOmeminfo);///<summary>///获得系统总物理内存///</summary>///<returns></returns>publicstaticlongGetTotalPhys(){MEMORY_INFOMemInfo;MemInfo=newMEMORY_INFO();GlobalMemoryStatus(refMemInfo);return(long)MemInfo.dwTotalPhys;}///<summary>///获得系统当前在使用的物理内存///</summary>///<returns></returns>publicstaticlongGetMemoryLoad(){MEMORY_INFOMemInfo;MemInfo=newMEMORY_INFO();GlobalMemoryStatus(refMemInfo);return(long)MemInfo.dwMemoryLoad;}///<summary>///获得系统当前在使用的物理内存///</summary>///<paramname="categoryName">此性能计数器关联的性能计数器类别(性能对象)的名称</param>///<paramname="CounterName">性能计数器的名称</param>///<paramname="instanceName">性能计数器类别实例的名称,或者为空字符串("")(如果该类别包含单个实例)</param>///<returns></returns>publicstaticdoubleGetCpuLoad(stringcategoryName,stringCounterName,stringinstanceName){PerformanceCounterpc=newPerformanceCounter(categoryName,CounterName,instanceName);return(double)pc.NextValue();}}//定义内存的信息结构[StructLayout(LayoutKind.Sequential)]publicstructMEMORY_INFO{publicuintdwLength;publicuintdwMemoryLoad;publicuintdwTotalPhys;publicuintdwAvailPhys;publicuintdwTotalPageFile;publicuintdwAvailPageFile;publicuintdwTotalVirtual;publicuintdwAvailVirtual;}

解决方案四:
WMI不行?无事...飘过~~~
解决方案五:
使用wmi获得的信息,不宜循环刷新,这样代价比较大,所以我采用性能计数器来获得。谢谢whChina了,顺便再请教一下。我在上面写的代码第一行写错了,就是CPU的使用率,定义计数器时应该是这样的:PerformanceCounterCpuPercetageTime=newPerformanceCounter("Process","%ProcessorTime",ProcessName);category是“Process”而不是“Processor”.现在困扰我的问题是data[0]=CpuPercetageTime.NextValue().ToString()+"%";输出data[0]的信息中居然出现了123%的数据,这是为什么呢?请帮忙找原因。
解决方案六:
我记得不是百分比····CPU使用率是算出来的计数器不提供百分比···我以前也遇到过···最后我用WIN32解决的。。。。GetSystemInfo
解决方案七:
Deathsign能讲明白点吗?CPU使用率该怎么计算?如果不是百分比,那NextValue()得到的值是什么?你用WIN32解决的,那如何在0.1秒甚至更少的时间间隔内循环刷新某个进程的CPU使用率呢?GetSystemInfo是怎么用的?

时间: 2024-09-20 12:26:43

性能计数器的问题。的相关文章

SQL Server 2005性能计数器错误的解决办法

查看安装帮助后,发现有这一段话: 1 在 Microsoft Windows 2003 或 Windows XP 桌面上,依次单击"开始"."运行",然后在"打开"中键入 regedit.exe,再单击"确定".在 Windows 2000 中,使用 regedt32.exe 启动注册表编辑器. 2 定位到以下注册表项: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\Cur

一个简单的性能计数器:CodeTimer

有数据,有真相,相信大家在平时的工作或学习过程中,都需要比较几种不同方法或实现之间的性能 差距.在这些时候,往往就需要我们不断地创建Stopwatch,打开,关闭,然后打印时间.这种一遍又一 遍的重复终有一天会让人忍无可忍,因此如果能有一个"标准"的性能计数器,那应该可以让生活轻松许 多.这个性能计数器不用复杂,够用就好:也不需要考虑扩展性,要扩展时直接修改代码就够了:同样不 需要考虑输出格式,直接打印在Console就行. 在上次的.NET技术大会中,Jeffrey Richter大

进程性能计数器已禁用的解决办法

未处理的异常:进程性能计数器已禁用 调试出错: 未处理的异常: System.InvalidOperationException: 进程性能计数器已禁用,因此无法执行所请求的操作 问题解决: 方法一: 这时只要修复一下windows的性能计数器即可. 具体方法:在运行中输入:lodctr /r 然后回车,运行完后重启计算机即可. 方法二: 修改注册表信息 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/PerfProc/Performan

利用Windows性能计数器(PerformanceCounter)监控

一.概述 性能监视,是Windows NT提供的一种系统功能.Windows NT一直以来总是集成了性能监视工具,它提供有关操作系统当前运行状况的信息,针对各种对象提供了数百个性能计数器.性能对象,就是被监视的对象,典型例子有Processor.Process.Memory.TCP/UDP/IP/ICMP.PhysicalDisk等.计数器通常提供操作系统.应用程序.服务.驱动程序等的性能相关信息,以此来分析系统瓶颈和对系统及应用程序性能进行诊断和调优.性能计数器机制让应用程序和操作系统组件可以

SQL Server 2008 R2 性能计数器详细列表(三)

原文:SQL Server 2008 R2 性能计数器详细列表(三) SQL Server,Deprecated Features 对象: 监视指定为不推荐使用的功能: SQL Server Deprecated Features 计数器实例 说明 "#"和"##"作为临时表和存储过程的名称 遇到不包含 # 以外的任何字符的标识符.请至少使用一个其他字符.每次编译时发生. "::"函数调用语法 表值函数遇到 :: 函数调用语法.请替换为 SELE

c-怎样编程获取性能计数器物理磁盘相应值

问题描述 怎样编程获取性能计数器物理磁盘相应值 如,%Disk Time %Idle Time %Disk Bytes/sec .不是通过对话框选择获取,因为值要返回!代码贴下,这方面初次入门.谢谢! 解决方案 参考http://forums.codeguru.com/showthread.php?371171-Performance-counter-in-chttp://www.codeproject.com/Articles/8590/An-Introduction-To-Performan

SQL Server 2008 R2 性能计数器详细列表(五)

原文:SQL Server 2008 R2 性能计数器详细列表(五) SQL Server:SQL Statistics 对象: 监视编译和发送到 SQL Server 实例的请求类型 SQL Server SQL Statistics 计数器 说明 Auto-Param Attempts/sec 每秒的自动参数化尝试数.其总数应为失败的.安全的和不安全的自动参数化尝试之和.当 SQL Server 实例尝试通过将某些文字替换为参数来参数化 Transact-SQL 请求时,就会进行自动参数化,

SQL Server 2008 R2 性能计数器详细列表(四)

原文:SQL Server 2008 R2 性能计数器详细列表(四) SQL Server Latches 对象: 监视称为闩锁的内部 SQL Server 资源锁.通过监视闩锁来确定用户活动和资源使用情况,将有助于查明性能瓶颈 SQL Server Latches 计数器 说明 Average Latch Wait Time (ms) 必须等待授予的闩锁请求的平均等待时间(毫秒). Latch Waits/sec 未能立即授予的闩锁请求数. Number of SuperLatches 目前是

PowerShell 读取性能计数器二进制文件(.blg)记录并汇总计算_PowerShell

由于监控及报告需要,要统计性能计数器每天数值情况,确认数据库服务器的运行状况.若打开计数器填写,比较麻烦,现在统计用 powershell 来读取计数器的值. 第一阶段:Powershell 读取计数器文件并统计其中一个计数器的值 $startDate = (Get-Date).AddDays(-1).Date $endDate = (Get-Date).Date $perfPath = "D:\DataFiles\PERFMON\MSSQL_PERFMON_08240904.blg"

SQL Server 2008 R2 性能计数器详细列表(二)

原文:SQL Server 2008 R2 性能计数器详细列表(二) SQL Server Buffer Partition 对象: 提供计数器来监视 SQL Server 如何使用可用页 SQL Server Buffer Partition 计数器 说明 Free list empty/sec 每秒钟请求但无法提供可用页的次数. Free list requests/sec 每秒请求可用页的次数. Free pages 所有可用列表的总页数. SQL Server CLR 对象: 监视 Mi