Acabo de leer una página de "Whats new .NET Framework 4.0". Tengo problemas para entender el último párrafo:Algo extraño acerca de la funcionalidad de enumeración del sistema de archivos .NET 4.0
Para eliminar los identificadores abiertos en los directorios o archivos
Crear un método personalizado (o función en Visual Basic) para contener su código de enumeración enumerados.
Aplicar el atributo MethodImplAttribute con la opción NoInlining al nuevo método. Por ejemplo:
[MethodImplAttribute(MethodImplOptions.NoInlining)]
Private void Enumerate()
Incluir las siguientes llamadas a métodos, a correr detrás de su código de enumeración :
* The GC.Collect() method (no parameters). * The GC.WaitForPendingFinalizers() method.
Por qué el atributo NoInlining? ¿Qué daño haría la línea interna aquí?
¿Por qué llamar al recolector de basura manualmente? ¿Por qué no hacer que el enumerador implemente IDisposable en primer lugar? Sospecho que utilizan las llamadas API FindFirstFile()/FindNextFile() para la imlementación, por lo que se debe llamar a FindClose() en cualquier caso si la enumeración está completa.
EDIT:
¿Alguien tiene una idea de por qué el atributo NoInlining se sugiere en el artículo?
Wow. No esperaba ver * que * en el consejo de MSDN ... –
Estoy sorprendido de ver eso también, pero tenga en cuenta las circunstancias especiales descritas en el artículo: "Si está ejecutando Windows XP o una versión anterior, una eliminación la operación en un archivo o directorio que sigue a una enumeración podría fallar si hay un identificador abierto que permanece en uno de los directorios o archivos enumerados. Si esto ocurre, debe inducir a una recolección de elementos no utilizados para eliminar los identificadores abiertos ". –
@Brian: si solo se aplica a XP, estoy contento ... ish. –