큰 용량의 파일을 읽어서 IdHTTP로 업로드 하는데요..
업로드는 문제가 없는데
파일을 읽는데 컴퓨터가 뻗습니다.
보통 500M 정도 올리는데요...
CPU 사용이 100%이구요.. 컴이 꼼짝도..하지 않아요..
파일을 다 읽어 때 까지.. 이거..꼭 해결해야 되는데..
어떤식으로 파일을 읽어야 되는지 고수님들의 도움 꼭 부탁드립니다..
fh := FileOpen(ListBox1.Items.Strings[I], fmOpenRead);
if ( fh <> -1 ) Then
Begin
icount := FileRead(fh, buffer, sizeof(buffer));
while icount <> 0 Do
Begin
file_size := file_size + icount;
DataStream.WriteBuffer(buffer, icount);
icount := FileRead(fh, buffer, sizeof(buffer));
End;
End;
FileClose(fh);
HTTP 로 대용량 파일을 주고 받으면 웹서버가 조용히 맛갑니다..
전에 대용량 파일 처리 프로그램을 만들어 달란 제의를 받았었습니다.
그때 얘기하며 어떻게 할께 궁리를 좀 했었죠.. (개발의뢰 금액이 너무 작어서 캔슬됬습니다.)
그당시 제가 하려고 했던 방식은, 우선 파일을 작게 잘라서(약 1M)로 잘릅니다. 서버는 접속해 있는 사용자 들에게 차례대로 순서를 주며 조각조각 받습니다. 다 받으면 합쳐서 본래 파일을 만들어 냅니다.
중요 요점은 한 사용자가 파일을 받는 시간이 길어지더라도 전체 사용자에게 차례대로 순서를 주는데 있습니다.
그 외에 서버는 트래픽을 분산 시키는 기능이 있어야 할 것 입니다.
파일을 쪼개고 합치는 API함수가 있으니, 쪼개는 것은 걱정할 일 없을겁니다.
파일 주고 받는 것은 FTP가 좋을 겁니다.
좀더 개선 시키면, 한 사용자가 화일 요청을 하면 접속한 사용자중 해당 파일의 조각을 가지고 있으면 바로 전송하게 하면 서버의 부하가 줄겠죠.
정말 큰 작업 입니다. 아주 어렵고 만만하지 않은 프로그램이죠.
즐푸하세여..
타락천사..