首先是一些背景:
我目前正在使用j-interop从Linux框查询对Windows框的WMI调用,我正在针对WMI运行这个查询:
SELECT * FROM __InstanceCreationEvent WHERE TargetInstance ISA 'Win32_NTLogEvent'并将其作为通知查询执行,这样我就可以在创建数据时立即获得数据。然而,这在(罕见的)时候证明了一个问题。
比方说,当用户更改根文件夹上的权限时,我可能会被成千上万条日志淹没,系统可以处理这个很好的java和interop代码,但是WMI周期似乎是这样的:
Hook into event
while(forever)
{
Query server for next event.
Do work with event.
}显然,这对我不起作用,因为我会在服务器上来回跳好几千次,程序不会窒息,但这肯定要花费很长时间,我无法找到一种方法让事件返回所有挂起的事件(我认为)。
下一个选择是跟踪WMI返回的最后一个记录ID,并对记录ID大于最后一个事件的所有事件执行一个直接的查询,我假设这会更好地工作,但是我不熟悉DCOM。
所以我的问题是:
如果我运行的是ExecQuery而不是通知查询,那么由于分布式COM的性质,我是否需要在客户机/服务器之间来回跳来跳去,以遍历查询返回的每条记录?
发布于 2011-10-27 13:52:45
这里的主要解决方案是不要为此使用DCOM,这是非常低效率的,而且我已经将服务器置于执行大量DCOM指令的大量CPU压力之下。
如果我想远程执行Windows实现,或者在本地执行WinAPI,我将研究它。
https://stackoverflow.com/questions/5707037
复制相似问题