質問自体に飛び込む前に、私がここで食物連鎖全体を管理しているわけではないことを理解してください。特定のAPIに対して開発する必要があるため、「あなたは間違ったことをしている」という種類の回答やコメントは役に立ちません.
生データのチャンクを通信するコンポーネントは、ほとんどの場合、byte[]
またはタイプのバッファを介して通信しますArraySegment<byte>
。後者には、大きなバッファーを一度だけ割り当ててから、ArraySegment メカニズムを介してその一部を使用して、メモリ割り当て、断片化、および GC の問題を軽減できるという大きな利点があります。ここには新しいものはありません。
ただし、これには代償が伴います: を消費する (おそらく外部のクローズドソースの) コンポーネントArraySegment<byte>
は完全な配列への参照 (したがってアクセス) を取得します。
今:
- 広範な検索により、既存の配列の一部のみを完全な配列として公開するメカニズムが明らかになりませんでした。この SO の質問は、私が得た最も近いものでしたが、「配列ではない」ため、まだ使用できません。
- からの継承
System.Array
はサポートされていません。 - からの継承
System.ArraySegment<T>
もサポートされていません。
私の一連の質問は次のとおりです(1つに答えると後の質問は時代遅れになります):
- 自己開発したラッパーを
byte[]
(外国の)消費者に提示する「トリッキーな」方法はありますか ArraySegment<byte>
または、完全な基礎となる配列を公開しない、自己開発のラッパーを(外部の)消費者に提示する「トリッキーな」方法はありますかSystem.Array
または、私が見逃したから継承する方法はありますかbyte[]
繰り返しますが、既に割り当てられている(そして固定されている)メモリ領域から作成する方法はありますか?
編集:
私が受け取ったコメントからすると、私はそれを十分に表現していませんでした。データを前後にコピーすることは解決策ではありません。今でも使っている松葉杖です。