내 프로젝트 중 하나에서는 동시에 65536개 파일에 대한 여러 쓰기 작업이 필요합니다.
먼저 모든 파일을 연 다음 반복해서 쓰고 마지막으로 모든 파일을 닫는 경우입니다. 그런 다음 첫 번째 쓰기 작업이 완료되는 데 약 16분이 걸리고 두 번째 쓰기 작업에는 40분이 소요됩니다. 더 이상의 테스트는 없습니다.
for (int i = 0; i < 65536; i++)
{
fileStream[i] = new FileStream(buffDir+"\"+ i.ToString() + ".dat", FileMode.Create,FileAccess.Write, FileShare.Write,14000);
}
쓰다;
쓰다;
쓰다;
........
for (int i = 0; i < 65536; i++)
{
파일스트림[i] .close();
}
쓰기 작업 중 해당 파일이 하나만 열려 있으면 쓰기 후에 해당 파일이 닫힙니다. 그러면 모든 쓰기 작업이 완료되는 데 약 2분 30초밖에 걸리지 않습니다.
주기{
for (int i=0;i<65536;i++)
{
열려 있는;
쓰다;
닫다;
}
}
두 번째 방법의 성능이 첫 번째 방법보다 훨씬 더 우수하다는 것을 알 수 있습니다. 모든 파일을 한 번에 열려면 많은 메모리가 필요합니다. 가장 중요한 것은 .net이 파일 스트림을 처리할 때 많은 메모리 할당 및 재활용을 수행해야 할 수 있으며 이로 인해 많은 메모리와 리소스가 소모됩니다.
그리고 테스트도 해봤는데 파일 개수가 상대적으로 적다면 첫 번째 방법이 두 번째 방법보다 성능이 훨씬 좋습니다.
http://xiyangwushi.cnblogs.com/archive/2006/06/28/437409.html