계층이 깊은 폴더 내의 파일 검색은 EnumerateFiles 메소드가 빠르다!

4655 단어 .NETFrameworkC#.NET

소개



기업내의 파일 서버에는 다수의 폴더·서브폴더가 작성되고 있어, 개인의 PC내에도 폴더가 복잡하게 작성되고 있습니다.
.NET Framrwork에서는 하위 폴더의 파일도 열거해 준다. 는 메모리를 나름대로 소비합니다.
.NET Framework 4.0 이상을 응용 프로그램에서 사용하는 경우 IEnumerable 형식으로 반환하는 System.IO.Directory.GetFiles(path, pattern, System.IO.SearchOption.AllDirectories)을 사용하여 이전 약점을 해결할 수 있습니다.

샘플 코드



지정된 폴더(하위 폴더 포함)에서 크기가 0인 세 파일을 찾습니다.
using System;
using System.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var dtStart = DateTime.Now;
            System.IO.Directory.GetFiles("\\\\fileserver\\shared", "*.*", System.IO.SearchOption.AllDirectories)
                .Where(e => (new System.IO.FileInfo(e)).Length == 0)
                .Where(e => { Console.WriteLine(e); return true; })
                .Take(3).ToArray();
            var dtEnd = DateTime.Now;
            Console.WriteLine();
            Console.WriteLine("処理時間は " + (dtEnd - dtStart).TotalSeconds.ToString() + "秒");
            Console.Read();
        }
    }
}

결과 예



150GB 바이트 이상의 공유 폴더를 대상으로 EnumerateFiles 메서드로 검색한 결과 ...

System.IO.Directory.EnumerateFiles(path, pattern, System.IO.SearchOption.AllDirectories)

GetFiles 메서드를 사용하는 경우 ...

좋은 웹페이지 즐겨찾기