En c:
, tengo decenas de miles de archivos *.foobar
. Están en todo tipo de lugares (es decir, subdirectorios). Estos archivos tienen aproximadamente 1 - 64 kb de tamaño y texto sin formato.Búsqueda/análisis más rápido/seguro de archivos?
Tengo un class Foobar(string fileContents)
que escribe fuertemente estos archivos .foobar
.
Mi desafío es obtener una lista de todos los archivos *.foobar
en c:
, representados como una matriz de objetos Foobar
. ¿Cuál es la forma más rápida de hacer esto?
Me interesa saber si hay una mejor manera (indudablemente) que mi primer enfoque, que sigue, y si este enfoque mío tiene algún problema potencial (por ejemplo, problemas de simultaneidad de E/S arrojando excepciones):
var files = Directory.EnumerateFiles
(rootPath, "*.foobar", SearchOption.AllDirectories);
Foobar[] foobars =
(
from filePath in files.AsParallel()
let contents = File.ReadAllText(filePath)
select new Foobar(contents)
)
.ToArray();
Hacer la operación en paralelo probablemente no le está comprando demasiado; la búsqueda de archivos en un disco físico es necesariamente una operación enlazada de E/S. –
Pregunta estúpida: ¿la búsqueda de archivos realmente requiere E/S de disco? Creo que la estructura del sistema de archivos de un disco está almacenada en memoria caché en la memoria por el kernel del sistema operativo y solo se actualiza según sea necesario, ya que la estructura está separada de los contenidos en el disco. ¿No? – user979672
Si la búsqueda está vinculada a E/S, lo único que '.Parallel()' compraría es enhebrar la 'nueva operación de Foobar()' (lo que podría llevar tiempo; después de todo, tiene que analizarse a través de una cadena gigante). ¿Correcto? Me pregunto si el costo de hacer girar nuevos hilos para cada 'nuevo Foobar()' es más caro que simplemente crear 'nuevos objetos Foobar()' en serie en un solo hilo. – user979672