.Net классы WMI - какие из них мне нужно удалить?

Если я использую ManagementObjectSearcher , я могу легко заключить его в с помощью блока :

using (var searcher = new ManagementObjectSearcher(scope, query))
{
    // ...
}

Это также просто для удаления коллекции, возвращенной искателем , в связи с тем, что foreach автоматически вызывает dispose в перечислителе :

using (var searcher = new ManagementObjectSearcher(scope, query))
{
    foreach(ManagementObject mo in searcher.Get())
    {
        // ...
    }
}

Но ManagementObject также реализует IDisposable :

using (var searcher = new ManagementObjectSearcher(scope, query))
{
    foreach(ManagementObject mo in searcher.Get())
    {
        // ...

        mo.Dispose(); // ?
    }
}
  • Нужно ли мне удалять каждый экземпляр ManagementObject , возвращенный в этом сценарии?
  • Если да, как мне сделать его безопасным в отношении исключений?
  • Есть ли там способ, которым я все еще могу использовать Linq в этом сценарии (и по-прежнему правильно вызывать Dispose )? Особенно с такими конструкциями, как searchcher.Get (). First () ?

Edit : Еще несколько связанных вопросов:

  • Должен ли я также вызывать Dispose в коллекции результатов поиска?
  • Как насчет поисковика?

Они оба также реализуют свой собственный метод IDisposable , хотя похоже, что поисковик наследует только реализацию Dispose от Компонент ; он не добавляет собственного поведения удаления.

8
задан Community 23 May 2017 в 11:45
поделиться