を使用してバイナリファイルを読み取っていますBinaryReader
。で入力をバッファリングしたときのディスクアクセス数をカウントしたいBufferedStream
。残念ながら、このクラスは封印されているため、メソッドをオーバーライドして手動でカウントすることはできません。
標準ライブラリを使用してそれを行う方法はありますか? または、これを実現するには、独自のバッファリング BinaryReader を作成する必要がありますか?
を使用してバイナリファイルを読み取っていますBinaryReader
。で入力をバッファリングしたときのディスクアクセス数をカウントしたいBufferedStream
。残念ながら、このクラスは封印されているため、メソッドをオーバーライドして手動でカウントすることはできません。
標準ライブラリを使用してそれを行う方法はありますか? または、これを実現するには、独自のバッファリング BinaryReader を作成する必要がありますか?
BufferedStream(Stream, int) コンストラクターで指定したバッファー サイズから計算できます。デフォルトは 4096 バイトです。Seek() を使用しないと仮定すると、ファイル アクセス数は です(filesize + bufsize - 1) / bufsize
。
完全に過剰なアプローチは、ストリームをチェーンできることを念頭に置いておくことです。独自の Stream 派生クラスを作成し、基になるストリームからデータを提供する必要がある Read() メソッドへの呼び出しの数を数えるだけです。そのクラスのインスタンスを BufferedStream コンストラクターに渡します。
どちらの方法でも、オペレーティング システムがディスク ドライバにアクセスしてディスクから物理的にデータを転送する頻度を知ることはできません。ファイル システム キャッシュはその間に位置し、実際の数はファイル データがディスク シリンダーとセクター間でどのようにマップされるかによって大きく異なります。それに関する情報は、パフォーマンス カウンターから取得できます。実際に使用する意味はほとんどありません。取得した数値は、別のマシンではほとんど再現されません。