Estoy escribiendo un escáner de directorios en .NET.¿Hay una manera más rápida de escanear un directorio recursivamente en .NET?
Para cada archivo/directorio necesito la siguiente información.
class Info {
public bool IsDirectory;
public string Path;
public DateTime ModifiedDate;
public DateTime CreatedDate;
}
que tienen esta función:
static List<Info> RecursiveMovieFolderScan(string path){
var info = new List<Info>();
var dirInfo = new DirectoryInfo(path);
foreach (var dir in dirInfo.GetDirectories()) {
info.Add(new Info() {
IsDirectory = true,
CreatedDate = dir.CreationTimeUtc,
ModifiedDate = dir.LastWriteTimeUtc,
Path = dir.FullName
});
info.AddRange(RecursiveMovieFolderScan(dir.FullName));
}
foreach (var file in dirInfo.GetFiles()) {
info.Add(new Info()
{
IsDirectory = false,
CreatedDate = file.CreationTimeUtc,
ModifiedDate = file.LastWriteTimeUtc,
Path = file.FullName
});
}
return info;
}
Resulta que esta implementación es bastante lento. Hay alguna manera de acelerar esto? Estoy pensando en codificar esto a mano con FindFirstFileW pero me gustaría evitar eso si hay un camino integrado que sea más rápido.
¿Cuántos archivos/directorios estás buscando? ¿Cuál es la profundidad de recursión? –
Es bastante superficial, 371 dirs con un promedio de 10 archivos en cada directorio. algunos directorios contienen otros subdirectores –
Parece que P/Invoke es el ganador aquí. Si aún necesita más velocidad, los hilos del trabajador podrían ayudar. –