.Net WMI-Klassen - welche muss ich entsorgen?

8

Wenn ich eine ManagementObjectSearcher verwende, kann ich sie einfach umbrechen es in einem using -Block:

%Vor%

Es ist auch einfach, die vom Sucher zurückgegebene Sammlung zu verwerfen. aufgrund der Tatsache, dass foreach automatisch den Enumerator abruft :

%Vor%

Aber ManagementObject implementiert auch IDisposable :

%Vor%
  • Muss ich jede in diesem Szenario zurückgegebene ManagementObject -Instanz entsorgen?
  • Wenn ich es tue, wie mache ich es ausnahmslos sicher?
  • Gibt es eine Möglichkeit, Linq in diesem Szenario noch zu benutzen (und trotzdem richtig Dispose aufzurufen)? Besonders bei Konstruktionen wie searcher.Get().First() ?

Bearbeiten : Noch ein paar verwandte Fragen:

  • Muss ich auch Dispose in der Suchergebnissammlung aufrufen?
  • Was ist mit dem Sucher?

Sie implementieren auch ihre eigene IDisposable -Methode, obwohl es so aussieht, als ob der Sucher die Dispose -Implementierung nur von Component erbt; Es fügt kein eigenes Dispose-Verhalten hinzu.

    
Merlyn Morgan-Graham 10.07.2011, 05:43
quelle

1 Antwort

3

ManagementObject erbt von System.ComponentModel.Component und Sie sollte Dispose explizit für alle geerbten Objekte von Component aufrufen. Sie können LINQ Methoden mit eigenen Prädikaten verwenden, die Dispose selbst aufrufen:

%Vor%

Dieser Code entspricht:

%Vor%

Wo Satisfy Ihre eigene Methode ist.

    
oxilumin 10.07.2011, 06:22
quelle

Tags und Links