gpt4 book ai didi

c# - Wmi EventWatcher 缺少事件 - 修复?

转载 作者:太空宇宙 更新时间:2023-11-03 15:25:19 27 4
gpt4 key购买 nike

我正在尝试监控我们的服务器,并且需要捕获 __InstanceCreationEvent 以在创建 Win32_PrintJob 时获得通知。为此,我尝试使用 ManagementEventWatcher,它几乎可以正常工作,但 Watcher 会遗漏一些 PrintJob 创作。

ManagementEventWatcher watcher = 
new ManagementEventWatcher(Server.Name + @"\root\cimv2",
"Select * From __InstanceCreationEvent Within 1
Where TargetInstance ISA 'Win32_PrintJob'");

watcher.EventArrived += PrintJobCreated;
watcher.Start();

每当创建一个非常短/小的 PrintJob 时,例如一个测试页,我不会一直收到创建事件。我不知道,但我猜这是因为 PrintJob 是在 1 秒计时器用完之前完成的,这可能吗?

但是。有没有办法接收所有 PrintJob 创建的 100%?

还是使用其他机制比 WMI-watcher 更好?

更新

我已经尝试将 within 更改为 0.1 效果更好,但是 100ms 在这里有意义吗?

最佳答案

WMI 中的所有内部事件(如 __InstanceCreationEvent)都使用轮询来检测更改 - 总是有可能错过特别短的事件。通过减少轮询间隔,您肯定会提高检测率,但绝对不能保证。

另请记住,WMI 轮询查询会消耗大量 CPU 资源,您不会提及您的环境,但一般来说,您要监视的打印队列越多,您将看到的 CPU 使用率就越高。如果增加轮询率,效果将会放大。这反过来可能会导致错过更多事件等。

如果您绝对需要准确性,您可以查看 FindFirstPrinterChangeNotificationFindNextPrinterChangeNotification Win32 API 函数但是它比您的 WMI 解决方案更复杂一些。在 Code Project 有一些指导。关于如何使其在 .NET/C# 中工作。

关于c# - Wmi EventWatcher 缺少事件 - 修复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35572872/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com