- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试剖析 DISK_PERFORMANCE struct 但似乎找不到任何像样的文档。有谁知道 ReadTime 和 WriteTime 成员是什么意思?
MSDN 声称,“完成读/写所需的时间”,但是读/写什么?还有它是用什么来衡量的?
最佳答案
更新:我不知道,但我现在知道了。
我不熟悉 DISK_PERFORMANCE,但我熟悉 HKEY_PERFORMANCE_DATA 性能数据。
Avg. Disk sec/Read counter 报告每次读取的平均时间(还有另一个用于写入的计数器)。这个计数器有 PERF_AVERAGE_TIMER类型。实际得到的数据是阅读的总时间和操作的总次数。您获取两个样本并减去这些值以获得样本间隔期间读取所花费的总时间和样本间隔期间的操作总数。然后,您将这两个值相除以获得每次读取的平均时间。
时钟频率也会与性能数据一起返回,因此您可以将时间单位转换为秒。
假设 DISK_PERFORMANCE 的工作方式类似,那么 ReadTime 和 WriteTime 将是所有读取和写入所花费的总时间。不幸的是,它使用的时钟频率并不明显,但它很可能使用来自 QueryPerformanceFrequency 的值。 .我会尝试这样做,看看结果(平均读写时间)是否与您在 perfmon 中看到的值相比较。
头文件 (winioctl.h) 不包含很多有用的信息,但它确实表示 IOCTL_DISK_PERFORMANCE 请求被转发到 DISKPERF 筛选器驱动程序或 SIMBAD 筛选器驱动程序(模拟磁盘故障)。这意味着您应该在不同的设备类型上获得一致的结果。
更新
所以我做了研究。一些示例数据:
3579000, 42, 801881, 42, 4.46325577
3749000, 79, 839970, 79, 4.46325464
4076000, 66, 913235, 66, 4.463254255
3614000, 77, 809723, 77, 4.463254718
1465000, 28, 328236, 28, 4.46325205
每一行都有来自 DISK_PERFORMANCE 的 ReadTime 和 ReadCount 成员的增量(每秒采样一次),后跟来自 HKEY_PERFORMANCE_DATA 的相应值,然后是第一个 ReadTime 除以第二个。
HKEY_PERFORMANCE_DATA 值以 QueryPerformanceFrequency 为单位,在我的 PC 上为 2240517Hz。 10,000,000/2240517 = 4.4633 因此 DISK_PERFORMANCE 指标似乎以 100ns (=10MHz) 为单位。
重申一下,DISK_PERFORMANCE::ReadTime 是以 100ns 为单位的读取总时间。
关于c++ - DISK PERFORMANCE 结构的 Read Time 和 WriteTime 成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9258705/
我想获取值,其 WRITETIME 值比某个时间更新。我试过这个查询,但它失败了: SELECT zoom,idx FROM tiles WHERE zoom=5 AND writetime(tile
我遇到一个问题,当我的代码显然没有同时发送时,一些 INSERT 命令被视为在 Cassandra 端同时发送。 (当网络有点拥塞时,就会出现问题,否则,一切正常。) 我想解决这个问题的方法是让我自己
我正在尝试剖析 DISK_PERFORMANCE struct 但似乎找不到任何像样的文档。有谁知道 ReadTime 和 WriteTime 成员是什么意思? MSDN 声称,“完成读/写所需的时间
我是一名优秀的程序员,十分优秀!