web-dev-qa-db-ja.com

Stream.Seek(0、SeekOrigin.Begin)またはPosition = 0

ストリームを先頭にリセットする必要がある場合(例:MemoryStream)は、使用するのがベストプラクティスです

stream.Seek(0, SeekOrigin.Begin);

または

stream.Position = 0;

私は両方がうまくいくのを見ましたが、一方が他方よりも正しいかどうか疑問に思いましたか?

160
ConfusedNoob

絶対位置を設定する場合はPositionを使用し、相対位置を設定する場合はSeekを使用します。どちらも利便性のために提供されているため、コードのスタイルと読みやすさに合ったものを選択できます。 Positionにアクセスするには、ストリームを安全に交換できるように、ストリームがシーク可能である必要があります。

142
gordy

両方の方法のソースコードを調べて確認できます。

コストはほぼ同じです(3つのifといくつかの算術)。ただし、これはPosition = 0などの相対オフセットではなく、Position += 0などの絶対オフセットにジャンプする場合にのみ当てはまります。

ただし、ベンチマーク手法では正確に測定できないなど、少数の整数演算およびifsチェックのパフォーマンスについて説明していることに留意してください。すでに指摘した他の人と同様に、重要な/検出可能な違いはありません。

5
ArekBulski