콘스탄틴 : 감사합니다! 이 링크에는 내가 찾고있는 테스트를 수행하는 명령 행 EXE가 있습니다.
내가이 페이지에 (워드 및 PDF에서) 더 흥미로운 기사로 해당 페이지 오프 링크 발견 : Sequential File Programming Patterns and Performance with .NET
이 글에서를, 그것은 취소 버퍼 파일 실적 (IOW, 아니 읽기 /에 대해 이야기 쓰기 캐싱 - 그냥 원시 디스크 성능을) 기사에서 직접 인용
을 :
는 V2 .NET 프레임 워크에 파일 스트림 버퍼링을 해제하는 간단한 방법이 없다.. 하나는 되지 않은 버퍼 파일 핸들을 얻기 위해 직접 윈도우 파일 시스템을 호출해야하고 '랩' 로하여 FileStream의 결과는 C#으로 다음과
[DllImport("kernel32", SetLastError=true)]
static extern unsafe SafeFileHandle CreateFile(
string FileName, // file name
uint DesiredAccess, // access mode
uint ShareMode, // share mode
IntPtr SecurityAttributes, // Security Attr
uint CreationDisposition, // how to create
uint FlagsAndAttributes, // file attributes
SafeFileHandle hTemplate // template file
);
SafeFileHandle handle = CreateFile(FileName,
FileAccess.Read,
FileShare.None,
IntPtr.Zero,
FileMode.Open,
FILE_FLAG_NO_BUFFERING,
null);
FileStream stream = new FileStream(handle,
FileAccess.Read,
true,
4096);
를 CreateFile()를 호출 FILE_FLAG_NO_BUFFERING 플래그는 파일 시스템이 모든 소프트웨어를 무시하도록 지시합니다. 파일에 대한 메모리 캐싱. FileStream을 생성자 세 번째 인수로 전달 된 '진정한'값은 스트림이 스트림이 닫힐 때 파일 핸들이 가 자동으로 종료됩니다 을 의미하는 파일 핸들의 소유권을해야 함을 나타냅니다. 이 후 hocus-pocus 이후, 버퍼링되지 않은 파일 스트림은 다른 어떤 것과 마찬가지로 방법으로 읽고 쓰여집니다. 수정의
나는 이것을 투표에 부쳤지 만, 테스트를 마친 후에는 작동하지 않았습니다. 불행히도 그 시점까지 투표를 삭제하기에는 너무 늦었습니다! 코드가 컴파일되지 않습니다 ('FileAccess.Read'와'CreateFile()'을 전달할 수 없으며 코드를 실행하지 않는 열거 형을 입력하면 hTemplate으로 'null'을 전달할 수 없습니다.) – Oliver
@Oliver : 나는이 코드를 7 년 동안 보지 않았기 때문에 일이 아마 바뀌었을 것이다. 나는 7 년 전 C#/VS2005 (또는 VS2008, 내가 그 시점에서 전환했다는 것을 확신하지 못한다.) 나는 내가 원래의 코드를 찾았다면 그것을 볼 수있을 것이다. – Pretzel