4

バイト配列 ( ) から作成されたBinaryReaderを使用すると、パフォーマンスが大幅に低下するかどうかを知りたいです。MemoryStreambyte[]

読み取りたいバイナリ データがあり、そのデータをバイト配列として取得します。私は現在、データを読み取るための 2 つのアプローチのどちらかを決定しており、それに応じて多くの読み取り方法を実装する必要があります。各読み取りアクションの後、読み取りデータの直後BinaryReaderの位置が必要になるため、 . 最初の非 BinaryReader アプローチ:

object Read(byte[] data, ref int offset);

2 番目のアプローチ:

object Read(BinaryReader reader);

このようなRead()メソッドは、すべてのデータが読み取られるまで、同じデータに対して連続して非常に頻繁に呼び出されます。

を使用するBinaryReaderと、より自然に感じられますが、パフォーマンスに大きな影響がありますか?

4

2 に答える 2

2

Read(byte[]) を呼び出すたびに、かなりの量のガベージが作成されます。MemoryStream の場合は 40 バイトになります。BinaryReader の場合は 64 バイトでカウントを停止しました。Dispose も通常使用されますが、何もしません。そのオーバーヘッドが重要かどうかは、あなたの質問からはわかりません。

Read(BinaryReader) オーバーロードの方が効率的というだけでなく、個人的には好みです。これにより、データのソースを柔軟に変更することもできます。これはもはや byte[] である必要はありません。たとえば、FileStream や NetworkStream からフィードできます。

于 2010-06-12T16:58:08.287 に答える
-1

BinaryReader の使用がより自然に感じられる場合は、そうしてください。アレイからの読み取りと比較して、顕著なパフォーマンスの低下があるとは思えません。

于 2010-06-12T15:42:31.143 に答える