MemoryStreamを生成して返す関数があります。生成後、MemoryStreamのサイズが固定されたら、それを書き込む必要はありません。出力のみが必要です。たとえば、MailAttachmentに書き込むか、データベースに書き込みます。
オブジェクトを手渡すための最良の方法は何ですか?MemoryStreamまたはバイト配列?MemoryStreamを使用する場合、読み取り後に位置をリセットする必要があります。
すべてのデータをメモリに保持する必要がある場合、多くの点で選択は任意です。で動作するStream
既存のコードがある場合は、MemoryStream
より便利かもしれませんが、 a を返す場合byte[]
は、常にnew MemoryStream(blob)
とにかくでラップすることができます。
それはまた、それがどれほど大きいか、そしてあなたがそれを保持している時間にも依存するかもしれません。長所と短所がありますMemoryStream
。データをしばらく保持している場合は、余分なものが削除されるため、強制的に a にすると便利です。ただし、短時間だけ保持する場合は、新しいコピーを作成するときにデータの大部分 (絶対最小: 半分)を複製する必要があるため、逆効果になる可能性があります。byte[]
そう; コンテキスト、使用法、意図に大きく依存します。ほとんどのシナリオでは、「機能し、明確で単純な方」で十分です。データが特に大きい場合や長期間保持されている場合は、意図的に微調整することをお勧めします。
このアプローチのもう 1 つの利点byte[]
: 必要に応じて、複数のスレッドが一度に安全にアクセスできます (読み取り中の場合) MemoryStream
。ただし、これは誤った利点である可能性があります。ほとんどのコードは、複数のスレッドからにアクセスする必要はありません。byte[]
byte[] を使用すると、固定サイズのオブジェクトでメモリの割り当てとクリーンアップが容易になり、オーバーヘッドが比較的少なくなります。特に、MemoryStream の関数を使用する必要がないためです。さらに、そのストリームをできるだけ早く破棄して、使用している可能性のある管理されていないリソースを解放できるようにする必要があります。