私はファイル形式で作業しています。ファイル形式にはデータのまとまりが含まれています...だから、私が持っているのは、 "チャンク"のListの配列です。これらは、関数を介してクラスにデータを追加するときに追加されます。リスト<byte>とバイト配列をコピーしていますか?
ここでファイルを保存すると、最初にチャンクを挿入する必要があります。今私はこれが意味をなさないかもしれないことを知っていますが、チャンク内のデータ型のデータオフセットを計算する前に、そのチャンク(空白です)を追加する必要があります。私がそうしないと、データのオフセットが狂ってしまいます。空白のチャンクを挿入した後、必要なデータをコピーする新しいbyte []配列を作成し、更新されたバイト配列で挿入した空のチャンクを上書きします。
私が挿入するデータチャンクには他のデータのオフセットが含まれているため、すべてを追加した後にオフセットを作成する必要がある主な理由です。
基本的に私が持っているものは、(のみ簡略化)これです:
public struct SizeIndexPair {
public int Size;
public int Index;
};
public class Chunks {
private Dictionary<int, SizeIndexPair> reserved;
public List<List<byte> > DataChunks;
...
public void Reserve(int ID, int size, int index) {
SizeIndexPair sip;
sip.Size = size;
sip.Index = index;
reserved.Add(ID, sip);
List<byte> placeHolder = new List<byte>(size);
DataChunks.Insert(index, placeHolder);
}
public void Register(int ID, byte[] data) {
SizeIndexPair sip = reserved[ID];
if (sip.Size != data.Length)
throw new IndexOutOfRangeException();
for (int i = 0; i < data.Length; i++) {
DataChunks[sip.Index][i] = data[i];
}
}
};
(私は、既存のチャンクに余分なデータを追加する必要がある場合がありますので、私はここでバイトのリストを()を使用してんだ)
私は意味があると思う。
このアプローチの問題は、私がメモリを増やしているアレイを倍増させることです。さらに、データをコピーするプロセスでは、特にファイルには大量のデータが含まれているため、アプリの処理速度が低下する可能性があります。
もっと良いアプローチがありますか?
これを簡単に解決したことの1つは、リストを修復することです。配列の予約と登録の代わりに、ポインタを使って配列に直接アクセスすることができます。これを行う方法はありますか?
ありがとうございました。
として、私は基本的に私は「修正」リストので、私はポインタでそれを反復処理できることができるかどうか知りたいあなたの質問 – BrokenGlass
を理解していません。 – Alex