微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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);
}
如果您需要更多代码,请告诉我:-)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。