Попробуйте поиграться с количеством потоков, т.к. помимо поиска файлов, у вас еще предполагается какая-то обработка, наверняка результаты будут различаться.
class Program
{
static readonly string[] Extensions = new string[] { "*.jpg", "*.png" };
static void Main(string[] args)
{
var drives = DriveInfo.GetDrives().Where(d => d.DriveType == DriveType.Fixed);
drives.AsParallel().ForAll(d =>
{
SearchFile(d.RootDirectory.FullName);
});
}
static void SearchFile(string path, int maxDegree = 1)
{
var images = Directory.GetFiles(path).Where(f =>
{
var ext = Path.GetExtension(f);
return Extensions.Any(e => e.Equals(ext, StringComparison.OrdinalIgnoreCase));
});
images.ToList().ForEach(i =>
{
// process image
});
var dirs = Directory.GetDirectories(path);
dirs.AsParallel().WithDegreeOfParallelism(maxDegree).ForAll(d => SearchFile(d));
}
}