易语言资源网 - 做最全的易语言资源下载社区
精易论坛授权登录

【Etw系列】几乎无延迟的Etw监听,效率极高   [复制链接]

    2022-09-03 09:36:39
    模块控件源码
    易语言资源网
    3142 次浏览
    来源链接

Etw系列:

更多:

  • 众所周知,ETW因为FlushTimer强制被设置为1秒的原因,导致ETW消息反馈会有1秒左右的延迟。
  • 如何降低延迟,实现实时监控呢?
  • 其实很简单,ETW模型给我们提供了手动Flush缓冲区的命令,我们只需要不停的手动Flush缓冲区就可以实现几乎实时的ETW监控。
  • 其实只要创建一个时钟,时钟周期中需要加2行简单的代码其实就搞定了:
  • 时钟周期我设置的是100毫秒,代表程序每100毫秒刷新一次ETW的缓冲区,即表明ETW消息回调的时间误差至少不大于100毫秒。
  • 在实际的程序中可以将刷新频率提得更加高,这样ETW消息的延迟就会更加低。在测试中,即使是将刷新缓冲区的时钟周期设置为1毫秒,程序的CPU占用也几乎为0,这表明ETW监听效率确实很高。(但是并不建议这样做,100毫秒刷新一次缓冲区的监听效率也基本满足实时要求)
  • 提示:程序既然已经利用时钟来刷新ETW缓冲了,那么ETW初始时的FlushTimer可以稍微设置大一点(即保证缓冲区的刷新几乎交给程序管理),例如此程序的FlushTimer被扩大到了10秒。
  • 帖子最后给出的例子程序一个是监听进程创建的,一个是监听文件变动的,效率相比原来的程序可以说是极高了。(监听其他的ETW模型可以自己修改)

PS:

  • 程序启用事件监视必须拥有管理员权限!
  • 程序启用事件监视必须拥有管理员权限!
  • 若监视程序异常退出,请务必手动停止监视事件
  • 若监视程序异常退出,请务必手动停止监视事件
  • 注意!!如果使用其他ETW系列的代码进行修改,使用前请务必取消这里的ControlTraceA第一个参数的传址属性:


点我下载 (已有 103 次下载)

引用模块





引用支持库


源码文件名 支持库文件名 支持库标识
Etw - FileInfoMinifilter.e 系统核心支持库 5.7 d09f2340818511d396f6aaf844c7e325
Etw - NT Kernel Logger - Process.e 系统核心支持库 5.7 d09f2340818511d396f6aaf844c7e325


[错误报告]   上一篇:找质数的~采用埃拉托斯特尼筛法...     下一篇:鼠标画圆画圆形源码...