Articles of 性能计数器

我怎么知道我的进程是CPU限制,I / O限制,内存限制还是

我试图加快编译我的应用程序的时间,而我正在研究的一件事是检查哪些资源(如果有的话)可以添加到构build机器中以加快速度。 为此,我该如何确定是否应该投入更多的CPU,更多的内存,更好的硬盘或者是否有其他资源绑定进程? 我已经看到了这个( 如何检查应用程序是cpu绑定还是内存绑定? ),我正在寻找更多的技巧和指针。 我到目前为止所尝试的是: 在构build机器上对我的本地计算机上的进程计时。 我发现构build机器的时间是我的机器的两倍。 运行“资源监视器”,在进程运行时查看CPU使用情况,内存使用情况和磁盘使用情况 – 在这样做的时候,我很难解释这些数字,主要是因为我不明白每列的含义以及如何转化为一台虚拟机与一台物理机箱,以及它对多CPU机箱的意义。

QueryPerformanceFrequency在使用HPET时是否准确?

我正在玩QueryPerformanceFrequency 。 它曾经返回3.6 Mhz ,但这还不够我正在做的事情。 我已经使用此命令启用HPET bcdedit /set useplatformclock true 。 现在它返回14.3 Mhz 。 这很好,它更精确…除了不是。 我很快意识到,我没有得到我期望的粒度。 如果我试图QueryPerformanceCounter轮询,直到它滴答,我能得到的最小增量是11 ,这意味着1.27Mhz 。 如果我尝试计算可以在一秒钟内从QueryPerformanceCounter获得的不同值的数量,则得到1.26Mhz 。 所以我想知道是否有办法真正使用14.3 Mhz的全部? 我正在使用Windows 7,64位系统,Visual Studio 2008。

在没有lodctr的c ++中的性能计数器

我习惯了C#应用程序如何创build性能计数器的方式 – 只是实例化新的PerformanceCounter对象并使用它。 我现在被迫使用非托pipeC(C ++?),而且我很不满意使用API​​和示例的易用性。 我的主要痛点是需要使用lodctr加载清单, 正如MSDN中所述 。 我无法find任何解决scheme。 有没有什么办法,我可以使用性能计数器没有显式加载清单,因为我可以在C#中做?

以与语言无关的方式检索性能计数器值

在Windows下,性能计数器具有不同的名称,具体取决于操作系统语言。 例如,在英文Windows版本中,有性能计数器\Processor(_Total)\% Processor Time 。 在德语Windows版本上,该计数器被称为\Prozessor(_Total)\Prozessorzeit (%) 。 有没有办法以独立于语言的方式(使用C ++或C#)检索性能计数器值? 还是有没有一个替代scheme来获得整个计算机的处理器负载没有性能计数器?

以编程方式在registry中注册性能计数器

我试图注册一个性能计数器,这个过程的一部分包括添加一些文本描述到一个特定的registry项。 对于英文这个键是HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Perflib \ 009这显然也被称为HKEY_PERFORMANCE_TEXT。 在那里有一对值(计数器,帮助)有REG_MULTI_SZ数据,我需要修改它们来完成我的目标。 正式的做法是使用名为lodctr的工具以及.h和.ini文件 。 还有一个函数可以通过编程实现 ,但是我的理解是,这只是一个简单的调用lodctr程序的包装器。 我发现维护,分发和保持3个单独的文件同步的前景有点麻烦,所以我以前编写代码来做到这一点,它在Windows XP(也可能是Vista,但我不记得肯定)下工作得很好。 现在我试图在Windows 7上使用相同的代码,它不起作用。 问题是,每当我尝试设置registry值失败与ERROR_BADKEY; 即使是registry编辑器也无法修改这些值,所以这不是我的代码的问题。 我运行了Process Monitor,注意到在驱动程序级别没有任何活动,所以看起来这个访问必须在用户模式代码(例如advapi32.dll或其他地方)中被阻止。 我明白为什么微软会试图阻止人们这样做,因为这很容易搞砸,这样做会把整个性能计数器集合搞乱。 我要去debugginglodctr,看看纯粹是出于好奇,这个魔法是什么,但是我想知道有没有人碰到过这个? 除了lodctr工具还有其他的select吗? 也许直接调用NTregistryAPI? 如果可能的话,我宁愿避免lodctr方法的麻烦。 重现问题的一个最小例子: HKEY hKey = NULL; LONG nResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Perflib\\009"), 0, KEY_ALL_ACCESS, &hKey); if(ERROR_SUCCESS == nResult) { LPCTSTR lpData = _T("bar"); […]

删除Windows性能计数器类别

我有一个自定义的性能计数器类别。 Visual Studio服务器资源pipe理器拒绝删除它,声称它是“未注册或系统类别”。 通过编程实现它,如何删除类别? 有没有我可以删除的registry项?