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