2016-09-29 2 views
2

나는 프로젝트 작업을하고 있으며 이전에는 블로그 기사가 폴더의 텍스트 파일이었습니다. 이제 SQL Server 2008 서버의 데이터베이스에 아티클 내용을 저장하려고합니다.8KB가 넘는 파일이있는 DirectoryInfo GetFiles()

지금은 레코드를 삽입하지 않고 파일 이름을 가져 오려고합니다. 지금은 끝내기까지 15 분 이상 걸립니다. 이것은 Windows Form입니다.

private void LoadButton_Click(object sender, EventArgs e) 
{ 
    var dirInfo = new DirectoryInfo(@"P:\op\articles"); 

    foreach (var currFile in dirInfo.GetFiles()) 
    { 
     using (StreamReader sr = new StreamReader(currFile.FullName)) 
     { 
      OutputTextBox.Text += currFile.FullName + "\r\n"; 
     } 
    } 
} 

나는 단지 잡고 처리 할 1K 기사는 말을 한 후 삭제 뭔가를 할 수 어쨌든 거기 : 여기

내가 지금 가지고있는 무엇인가? 이 작업을보다 빠르게 수행 할 수있는보다 효율적인 방법이 있습니까?

+0

하나의 디렉토리에 8k 개의 파일을 넣을 수 있습니까? 아마 당신은 각각에있는 몇몇 파일을 가진 다수 하위 디렉토리를 만들 수 있습니까? – ashlar64

+1

왜 각 파일에 대해 StreamReader를 초기화합니까? 그냥 궁금해서. –

+0

IEnumerable 을 사용하여 한 번에 8000 개의 청크를 가져올 수 있으므로 한 번에 100 개를 처리 할 수 ​​있습니다. – confusedandamused

답변

4

나는 Directory.EnumerateFiles을보고 싶을 것입니다. 저는이 컬렉션이 느리게 컬렉션을 열거하고 많은 수의 파일에 대해보다 효율적으로 반환하고 반복을 제어 할 수 있다고 믿습니다.

참조 : Directory.EnumerateFiles

+2

흥미롭게도 MSDN [GetFiles()] (https://msdn.microsoft.com/en-us/library/4cyf24ss(v=vs.110).aspx) docs에서 EnumerateFiles for를 권장합니다. 큰 세트도. –

+0

Nice -이 답변은 OP wa 묻고있어. 특히 큰 초기 데이터 세트의 경우. 이렇게하면 컬렉션을 빌드하는 것과는 반대로 각 요소를 메모리로 가져올 때 처리 할 수 ​​있습니다. @SimonWilson 문서는 때로는 좋지만 오른쪽은 P입니다. – confusedandamused

관련 문제