Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
程序读取程序';Windows上的s页面错误计数 我希望我的Windows C++程序能够读取它造成的硬页面错误的数量。程序没有以管理员身份运行。编辑添加:说清楚,我对整个系统的页面错误总数不感兴趣_Windows_Winapi_Etw - Fatal编程技术网

程序读取程序';Windows上的s页面错误计数 我希望我的Windows C++程序能够读取它造成的硬页面错误的数量。程序没有以管理员身份运行。编辑添加:说清楚,我对整个系统的页面错误总数不感兴趣

程序读取程序';Windows上的s页面错误计数 我希望我的Windows C++程序能够读取它造成的硬页面错误的数量。程序没有以管理员身份运行。编辑添加:说清楚,我对整个系统的页面错误总数不感兴趣,windows,winapi,etw,Windows,Winapi,Etw,看起来ETW可能会为此导出计数器,但我很难弄清楚API,而且与管理员相比,普通用户可以访问什么还不清楚 有人有这个功能的例子吗?或者在Windows上根本不可能做到这一点 (OT,但这在*nix上容易多了,这难道不令人难过吗?gerusage(),您已经完成了。)我认为您可以使用GetProcessMemoryInfo()-请参阅以了解更多信息。是的,非常难过。或者,您不能假设Windows是如此gimp,以至于它甚至不提供页面错误计数器并进行查找:。这是在Windows中完成的。我已经有一段时

看起来ETW可能会为此导出计数器,但我很难弄清楚API,而且与管理员相比,普通用户可以访问什么还不清楚

有人有这个功能的例子吗?或者在Windows上根本不可能做到这一点


(OT,但这在*nix上容易多了,这难道不令人难过吗?gerusage(),您已经完成了。)

我认为您可以使用GetProcessMemoryInfo()-请参阅以了解更多信息。

是的,非常难过。或者,您不能假设Windows是如此gimp,以至于它甚至不提供页面错误计数器并进行查找:。

这是在Windows中完成的。我已经有一段时间没有和他们做任何事情了。我不记得您是否需要以管理员身份运行来查询它们

[编辑] 我没有提供示例代码,但根据,您可以获得特定流程的以下信息:

处理:页面错误/秒。这是一个 显示页数 由于请求而发生的故障 从这个特殊的过程中。 页面错误过多 特定过程是一种指示 通常是糟糕的编码实践。 这些函数和DLL中的任何一个都不可用 组织正确,或数据集正确 应用程序正在使用的 打电话的效率不高 态度


afai可以告诉您,实现这一点的唯一方法是使用ETW(Windows事件跟踪)来监视内核硬页错误。事件负载有一个线程ID,您可以将该ID与现有进程关联(顺便说一句,这将是非常重要的),以生成每个进程的运行计数。我看不到任何方法可以获得每个进程的历史信息

我可以向您保证,这是一个很难解决的问题,因为在每个进程的显示中只支持页面错误(软或硬)

当查找到错误时,会发生页面错误 页表项无效。如果 需要输入请求的页面 从磁盘上看,它被称为硬页 故障(非常昂贵的操作), 并考虑所有其他类型 软页面错误(较便宜的 操作)。页面错误事件负载 包含虚拟内存地址 发生页面错误,并且 导致错误的指令指针 信息技术硬页错误需要磁盘 访问发生,这可能是 首次访问文件或文件中的内容 对已删除的内存块的访问 呼出。启用页面错误事件 导致记录硬页错误 作为硬页类型的页面错误 过错但是,硬故障通常是 对经济有相当大的影响 性能,因此需要单独的事件 仅适用于以下硬故障: 可以单独启用。艰苦的 故障事件有效负载具有更多数据, 例如文件密钥、偏移量和线程 ID,与页面错误事件进行比较


Microsoft网站上有一个C/C++示例,解释了如何读取性能计数器:


您可以复制/粘贴它,我认为您对“内存”/“页面读取/秒”计数器感兴趣,正如这篇有趣的文章所述:

我认为您不需要管理凭据来枚举性能计数器。codeproject的一个例子是,这是软页面错误的数量。看这里。我明白这是为了提供全系统的信息,而不是每个流程的信息。我弄错了吗?我可以通过这种方式获取每个应用程序的信息吗?看起来这只提供了系统范围的数据。@Justin-Hmm。。。我错过了你问题中的那一部分。我不这么认为,因为当您浏览perf计数器时,例如使用Perfmon,您只会在“Process”类别下看到“Page Faults/sec”。即使是未记录的API(NtQueryInformationProcess、VM_计数器)也不会这样做。在此处查看另一个相关线程:看起来Windows没有公开这些统计信息。@Luke-如果您将其作为答案发布,我会接受。不幸的是,我认为这是软页面错误和硬页面错误的总和。据我所知,Process Explorer使用性能计数器,我想这就是为什么它显示硬页面错误和软页面错误的原因。我从未使用过ETW,但从我所读到的来看,它看起来更强大。@Dave-是的,ETW很好,但比性能计数器更难使用。