Właśnie przeczytałem stronę "Whats new .NET Framework 4.0". Mam kłopoty ze zrozumieniem ostatni akapit:Dziwna rzecz dotycząca funkcji wyliczania systemu plików .NET 4.0
Aby usunąć otwarte uchwyty na wymienionych katalogów lub plików
Utwórz niestandardową metodę (lub funkcja w języku Visual Basic) powstrzymywanie kod wyliczenia.
Zastosuj atrybut MethodImplAttribute z opcją NoInlining dla nowej metody. Na przykład:
[MethodImplAttribute(MethodImplOptions.NoInlining)]
Private void Enumerate()
Dołącz następujące wywołania metod, aby uruchomić po kodzie wyliczenie :
* The GC.Collect() method (no parameters). * The GC.WaitForPendingFinalizers() method.
dlaczego atrybutu NoInlining? Jaką szkodę wprowadziłbyś tutaj?
Po co ręcznie wywoływać moduł do zbierania śmieci, dlaczego w pierwszej kolejności nie należy implementować modułu wyszukującego IDisposable? Podejrzewam, że używają wywołań API FindFirstFile()/FindNextFile() do implementacji, więc FindClose() musi być wywołana w każdym przypadku, jeśli wyliczenie jest zrobione.
EDIT:
Czy ktoś ma pomysł dlaczego atrybut NoInlining jest sugerowane w artykule?
Wow. Nie spodziewałem się, że * to * w opinii MSDN ... –
Jestem także zaskoczony, że to widzę, ale zwróć uwagę na specjalne okoliczności opisane w artykule: "Jeśli korzystasz z systemu Windows XP lub wcześniejszego, usuń operacja na pliku lub katalogu, który następuje po wyliczeniu, może zakończyć się niepowodzeniem, jeśli istnieje otwarty uchwyt, który pozostaje w jednym z wyliczonych katalogów lub plików .Jeśli tak się stanie, musisz wywołać kolekcję śmieci, aby usunąć otwarte uchwyty. " –
@Brian - jeśli dotyczy tylko XP, jestem zadowolony z ... ish. –