복사지 않고 파일을 사용하여 windows 파일 캐시
-
09-06-2019 - |
문제
누구나 알고의 방법에서 파일을 복사로 경로 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 는 같은 효과가 있습니다.