Ich lese gerade eine Seite von "Whats new .NET Framework 4.0". Ich habe Mühe, den letzten Absatz zu verstehen:Seltsame Sache über .NET 4.0 Dateisystemaufzählung Funktionalität
Um offene Handles auf aufgezählt Verzeichnisse oder Dateien
Erstellen Sie eine benutzerdefinierte Methode (oder Funktion in Visual Basic) zu entfernen Ihre Aufzählung Code zu enthalten.
Wenden Sie das MethodImplAttribute-Attribut mit der NoInlining-Option auf die neue Methode an. Zum Beispiel:
[MethodImplAttribute(MethodImplOptions.NoInlining)]
Private void Enumerate()
folgende Methodenaufrufe einschließen, nach der Aufzählung Code auszuführen:
* The GC.Collect() method (no parameters). * The GC.WaitForPendingFinalizers() method.
Warum das Attribut NoInlining? Welchen Schaden würde Inlining hier anrichten?
Warum den Garbage Collector manuell aufrufen, warum sollte der Enumerator IDisposable nicht zuerst implementieren? Ich vermute, dass sie FindFirstFile()/FindNextFile() - API-Aufrufe für die Implementation verwenden, daher muss FindClose() in jedem Fall aufgerufen werden, wenn die Enumeration abgeschlossen ist.
EDIT:
Hat jemand eine Idee, warum das NoInlining Attribut in dem Artikel vorgeschlagen wird?
Wow. Ich habe nicht erwartet, * das * in MSDN Beratung zu sehen ... –
Ich bin überrascht, das zu sehen, aber beachten Sie die besonderen Umstände in dem Artikel beschrieben: "Wenn Sie Windows XP oder früher ausführen, ein Löschen Die Operation für eine Datei oder ein Verzeichnis, das einer Enumeration folgt, kann fehlschlagen, wenn ein geöffnetes Handle in einem der aufgelisteten Verzeichnisse oder Dateien vorhanden ist. Wenn dies der Fall ist, müssen Sie eine Garbage Collection auslösen, um die geöffneten Handles zu entfernen. –
@Brian - wenn es nur für XP gilt, bin ich zufrieden ... ish. –