문제

누구나 알고의 방법에서 파일을 복사로 경로 B 억제하는 Windows 파일 시스템 cache?
일반적인 사용가 큰 파일을 복사하고 있는 중이라면에서 USB 드라이브 또는 서버가 사용자의 로컬 시스템에 있습니다.Windows 보를 교환 모두면 파일이 정말 큰,예를 들어,2GiB.아보세요를 들어 C#지만,나는 추측이 Win32 부르는 일종의 가능한 경우.

도움이 되었습니까?

해결책

더욱 중요한 것이 있 FILE_FLAG_WRITE_THROUGH 및 FILE_FLAG_NO_BUFFERING.

MSDN 는 문서에 그들을 두: http://support.microsoft.com/kb/99794

다른 팁

C#가 찾은 이런 작업이 변경 될 수 있습을 직접 복사를 대상 파일:

    public static byte[] ReadAllBytesUnbuffered(string filePath)
    {
        const FileOptions FileFlagNoBuffering = (FileOptions)0x20000000;
        var fileInfo = new FileInfo(filePath);
        long fileLength = fileInfo.Length;
        int bufferSize = (int)Math.Min(fileLength, int.MaxValue / 2);
        bufferSize += ((bufferSize + 1023) & ~1023) - bufferSize;
        using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.None,
                                           bufferSize, FileFlagNoBuffering | FileOptions.SequentialScan))
        {
            long length = stream.Length;
            if (length > 0x7fffffffL)
            {
                throw new IOException("File too long over 2GB");
            }
            int offset = 0;
            int count = (int)length;
            var buffer = new byte[count];
            while (count > 0)
            {
                int bytesRead = stream.Read(buffer, offset, count);
                if (bytesRead == 0)
                {
                    throw new EndOfStreamException("Read beyond end of file EOF");
                }
                offset += bytesRead;
                count -= bytesRead;
            }
            return buffer;
        }
    }

나는 확실하지 않으면 이것은 하지만 살펴보 향상된 성능을 사용하여 FILE_FLAG_SEQUENTIAL_SCAN.

요약

가 깃발을 위한 CreateFile() 라는 FILE_FLAG_SEQUENTIAL_SCAN 이 직접 캐시 관리자 액세스 파일을 순차적으로 동작한다.

누구나 읽고 잠재적으로 큰 파일 순차적으로 액세스할 수 있는 지정 이 플래그에 대한 향상된 성능을 제공합니다.이 플래그는 경우 유용합니다 독 는 파일은"대부분"sequential, 하지만 당신은 때때로 건너뛰 작 의 범위 바이트입니다.

당신 마음은 도구를 사용하여,ESEUTIL 근무합니다.

을 확인할 수 있습이 블로그 항목을 비교하는 버퍼링되고 NonBuffered IO 기능과를 얻을 ESEUTIL.

복사 중 일부에서 텍스트 technet 블로그:

그래서 보고의 정의 buffered I/O 위,우리가 볼 수 있는 인식의 성능 문제의 거짓말 파일 시스템에서 캐쉬 오버헤드가 발생합니다.버퍼링되지 않은 I/O(또는 raw 파일을 복사본)을 사용하는 것이 좋을 복사하려고 할 때 큰 파일이 하나의 위치에서 또 다른 경우 우리가하지 않으려는 원본 파일에 액세스한 후 복사본을 완료합니다.를 이용하여 파일 시스템 캐시 오버헤드를 방지하는 파일 시스템에서 캐시되고 효과적으로러 큰 파일 데이터입니다.많은 응용 프로그램을 달성한 이 호출하여 CreateFile()을 대상 파일,다음 사용하 ReadFile()및 WriteFile()함수를 데이터를 전송할 수 있습니다.CreateFile()-CreateFile 기능을 생성하거나는 파일을 열고 파일 stream,directory,실제 디스크,볼륨 콘솔 버퍼,테이프 드라이브,커뮤니케이션 리소스,메일 슬롯 또는 파이프라고 합니다.기능는 핸들을 반환합에 액세스하는 데 사용할 수 있습니다.ReadFile()-The ReadFile 기능 파일에서 데이터를 읽고,시작 위치에 있는 파일 포인터를 나타냅니다.이 기능을 사용할 수 있습니다 모두에 대한 동기 및 비동기 작업입니다.WriteFile()-WriteFile 기능 데이터를 기록에서 파일 위치를 지정한 파일 포인터이다.이 기능은 디자인에 대한 동기 및 비동기 작업입니다.에 대한 파일을 복사 네트워크의 주위에 매우 큰,나의 복사본을 유틸리티의 선택입니다 ESEUTIL 는 하나의 데이터베이스의 유틸리티를 제공합니다.

Eseutil 이 올바른 답 또한,이후 Win7/2008R2,사용할 수 있습니다/j 스위치 Xcopy 는 같은 효과가 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top