C# でファイル リーダーを作成していますが、大量のデータが列挙されます。読み込んだ各要素に同じバッファを使用し、クライアントによるさらなる処理のためにバッファを渡したいと思います。byte[]
生のバッファーと長さではなく、正しいサイズの を返すことができれば、API はよりクリーンになります。
メモリをコピーせずにC#でこれを行うことは可能ですか?
使用できますArraySegment<T>
http://msdn.microsoft.com/en-us/library/1hsbd92d.aspx
これにより、データをコピーせずに、渡したいセグメントの開始と終了を指定できます。
API パラメータの型を変更できる場合は、 ArraySegmentを使用できると思います。
ArraySegment
type は、配列範囲に関する情報を格納できる汎用構造体です。配列範囲を格納するのに便利です。はArraySegment
、メモリのコピーとヒープの割り当てを減らす最適化を容易にします。
MSDNから;
Array プロパティは、配列のコピーではなく、元の配列全体を返します。したがって、Array プロパティによって返される配列に加えられた変更は、元の配列に加えられます。
ここに がありDEMO
ます。