Ho appena letto una pagina di "Whats new .NET Framework 4.0". Ho difficoltà a capire l'ultimo paragrafo:Strana cosa sulla funzionalità di enumerazione del filesystem .NET 4.0
Per rimuovere handle aperti sulla directory o file
Creare un metodo personalizzato (o funzione in Visual Basic) per contenere il codice di enumerazione enumerati.
Applicare l'attributo MethodImplAttribute con l'opzione NoInlining al nuovo metodo. Per esempio:
[MethodImplAttribute(MethodImplOptions.NoInlining)]
Private void Enumerate()
Includere le seguenti chiamate di metodo, a rincorrere il proprio codice di enumerazione :
* The GC.Collect() method (no parameters). * The GC.WaitForPendingFinalizers() method.
Perché l'attributo NoInlining? Che male farebbe l'inline qui?
Perché chiamare il garbage collector manualmente, perché non rendere l'idificatore implementare IDisposable in primo luogo? Sospetto che utilizzino le chiamate API FindFirstFile()/FindNextFile() per l'implementazione, quindi è necessario chiamare FindClose() in ogni caso se l'enumerazione è stata eseguita.
EDIT:
Qualcuno ha un idea del perché l'attributo NoInlining viene suggerito in questo articolo?
Wow. Non mi aspettavo di vedere * that * in MSDN advice ... –
Sono sorpreso di vedere anche questo, ma prendi nota delle circostanze speciali descritte nell'articolo: "Se stai usando Windows XP o precedente, una cancellazione l'operazione su un file o una directory che segue un'enumerazione potrebbe non riuscire se è presente un'handle aperta che rimane su una delle directory o dei file elencati. Se ciò si verifica, è necessario indurre una garbage collection per rimuovere gli handle aperti. " –
@Brian - se si applica solo a XP sono contento ... ish. –