C#ManagementScope失去连接并导致内存泄漏

| 我正在使用WMI通过小型C#服务监视所有服务器,该服务创建了一堆ManagementScopes(应该监视的每个服务器一个)并定期轮询CPU负载等。 但是,偶尔会开始抛出COMExceptions,并显示消息“ RPC服务器不可用”。现在,如果它是真的,就足够了,但是我可以手动连接到服务器,如果我在同一服务器上创建新的ManagementScope,则可以毫无问题地重新连接! 但是这种方法存在一个问题:它会泄漏内存:-( ManagementScope没有关闭,处置或类似的清理功能,并且仅在收集垃圾时会泄漏内存。根据我所有的google搜索,这是底层WMI组件的问题,因此不是.Net问题。 因此,我认为我最好的方法是解决COMException问题,而只保留原始的ManagementScope-但是,如果我在COMException之后手动在范围上调用Connect,它的确会返回true(如\“是的,我已经连接),但首先尝试从中获取数据时,它会引发另一个COMException。 我已经尝试了很多事情,但是我根本无法弄清楚为什么会发生这种情况:-( 代码很大,因此我没有将其粘贴到此处(并且分为很多类) 但基本上,我创建了一个作用域,然后调用以下方法:
public ManagementObject GetSingleObject(string query)
{
    using (var searcher = CreateSearcher(query))
    {
        try
        {
            using (var collection = searcher.Get())
            {
                return collection
                        .Cast<ManagementObject>()
                        .FirstOrDefault();
            }
        }
        catch
        {
            return null;
        }
    }
}

private ManagementObjectSearcher CreateSearcher(string query)
{
    return new ManagementObjectSearcher(_scope, new ObjectQuery(query), _options);
}
如果您需要更多代码,请告诉我:-)
已邀请:

要回复问题请先登录注册