2012-10-21 5 views
2

BinaryReader을 사용하여 이진 파일을 읽습니다. BufferedStream으로 버퍼링 입력을 할 때 디스크 액세스 수를 계산하고 싶습니다. 불행히도이 클래스는 봉인되어 있으므로 수작업으로 계산하는 메서드를 재정의 할 수 없습니다.BufferedStream에서 디스크 액세스 수 얻기

표준 라이브러리를 사용하는 방법이 있습니까? 또는이 작업을 수행하려면 내 자신의 버퍼링 BinaryReader를 작성해야합니까?

+2

데이터는 디스크 공간의 OS에서 사용자 공간에 캐시 될 수 있습니다. 나는 당신이 대략적인 추정 이외의 것을 얻을 수 있다고 생각하지 않습니다. –

+0

@ L.B : 좋습니다, 모든 리필의 버퍼가 하나의 디스크 액세스라고 가정합시다. 어떻게 계산할 수 있을까요? – dulek

답변

1

BufferedStream (Stream, int) 생성자에서 지정한 버퍼 크기에서 계산할 수 있습니다. 기본값은 4096 바이트입니다. Seek()가 아니라고 가정하면 파일 액세스 수는 (filesize + bufsize - 1)/bufsize입니다.

총 잔인한 방법은 스트림을 연결할 수 있음을 명심하는 것입니다. 자신의 Stream 파생 클래스를 만들고 기본 스트림에서 데이터를 제공해야하는 Read() 메서드 호출 수를 계산하십시오. 그 클래스의 인스턴스를 BufferedStream 생성자에 건네줍니다.

어느 방법을 사용해도 운영 체제가 디스크 드라이버를 얼마나 자주 사용하고 디스크에서 실제로 데이터를 전송하는지 알 수 있습니다. 그 사이에 파일 시스템 캐시가 위치하며 실제 숫자는 디스크 실린더 및 섹터에 파일 데이터가 매핑되는 방식에 따라 크게 달라집니다. 성능 카운터에서 그 정보를 얻을 수 있습니다. 실제로 그것을 사용하는 데는 작은 요점이 있습니다. 여러분이 얻는 숫자는 다른 기계에서 거의 제대로 재생산되지 않습니다.

+0

그게 사고 방식이야, 내가 찾고 있던거야! 크게 작동합니다. 다양한 병합 정렬 알고리즘을 시연 할 때 하드 드라이브의 페이지 작업을 시뮬레이션하는 용도로만 학술 프로젝트에 사용하겠습니다. 그래서이 솔루션으로 충분합니다. – dulek

관련 문제