I have such problem : find all png files to disk and rename them as I did: static void DirSearch(string sDir) { try { var images = Directory.GetFiles(sDir, "*.png"); images.ToList().AsParallel().WithDegreeOfParallelism(100).ForAll(dd => Rename(dd) ); } catch { } try { foreach (string path in Directory.GetDirectories(sDir)) DirSearch(path); } catch (System.Exception excpt) { Console.WriteLine(excpt.Message); } } Actually a question : whether it is optimized enough ? Need as quickly as possible to process all png files.