2009-05-21 6 views
1

약 7MB의 파일이 로컬 공유에 몇 초 안에 저장됩니다. 그러나 해당 파일을 네트워크 위치에 저장하면 이됩니다. 나는 이것을 가속화하기 위해 내가 무엇을 할 수 있는지 궁금해. 로컬 시스템의 임시 파일네트워크에 파일 저장

  1. 저장 데이터, 다음 네트워크 경로에 걸쳐 임시 파일을 복사 : 여기에 내 현재 옵션입니다. 나는 이것이 가장 쉽고 가장 큰 돈이기 때문에 아마도 이것을 할 것이다.
  2. SetFilePointerEx()SetEndOfFile()을 사용하십시오. 나는 이것이이 질문에 대한 대답에 기초하여 유용하다고 생각했다 : Creating big file on Windows
  3. 버퍼는이라고 쓴다. 버퍼를 가득 채울 때 데이터를 직접 캐시하고 플러시 할 수 있지만 이미 OS에서 수행 한 캐싱과 중복되지는 않습니까?

# 1이 가장 좋은 옵션처럼 보이지만 네트워크 경로를 절약하는 데 더 빠른 방법에 대한 조언이 있다면 궁금합니다.

편집 : 네트워크가 기가비트 LAN에 연결되어 있으므로 속도가 문제가되지 않습니다. 파일을 네트워크 경로에 복사하는 데는 약 1 초가 걸립니다. 우리는 더 작은 덩어리의 데이터에서 WriteFile()을 호출하는 것으로 나타 났으므로 아마도 더 큰 덩어리를 작성하기 위해 더 높은 수준의 코드를 최적화하는 것이 도움이 될 것입니다. 그러나 속도 차이는 여전히 중요하므로 여전히 질문하는 것이 가치있는 질문입니다 .

+0

파일을 복사하는 데 1 초가 걸리면 CopyFile 또는 CopyFileEx 함수를 사용하거나 copy 명령을 호출해야합니다. – ChrisW

답변

0

느린 네트워크에서 실행하고 있습니까?

이드 옵션 번호 1로 가서 배경

1

누군가가 네트워크 경로에 저장 속도를 높일 수있는 더 좋은 방법에 대한 조언이 있는지 궁금 해요에서 네트워크 공유에 파일을 저장?

아마도 더 나은 네트워크가 필요합니다. ISP는 종종 빠른 다운로드를 제공하지만 느린 업로드를 제공합니다. FTP와 같은 프로토콜을 사용하여 7MB를 전송하는데 얼마나 걸립니까?

1

당신은 읽기 - 수정 - 쓰기 작업을 원할 것입니다. 일반적으로 적어도 4KB, 가능하면 2의 더 큰 블록을 작성하려고합니다. 그 이유는 1 바이트를 추가하기 위해서는 보통 파일의 마지막 블록을 읽고 1 바이트를 추가하고 새 블록을 다시 써야하기 때문입니다 . 4KB 블록 (only)을 쓰면, 모든 쓰기는 일반적으로 파일의 끝에 새로운 블록으로 끝납니다.

캐싱이 여기에 도움이되지만 캐싱이 완벽하지는 않습니다. 독점적으로 파일을 여는 것이 도움이 될 수 있습니다. 읽기 권한을 거부하면 OS에서 캐시를 플러시하는 것이 다른 앱에 너무 중요하지 않음을 알 수 있습니다.

CopyFile은 정확히 동일 할 수 있기 때문에 빠를 수 있습니다.

+0

좋은 점은, 비록 독점적 인 접근 (CreateFile()을 dwShareMode == 0로 호출)을 위해 파일을 이미 열어두고 있었지만 말입니다. –