0

だから私はこの種のスキームを持っています:

table Request {
  a:Sample;
  b:Sample;
}

テーブル Sample には複数の文字列ベクトルがあり、そのインスタンスはかなり大きいです。サンプル インスタンスを含むファイル システムに多数のファイルがあり、作成に時間がかかりました。ここで、2 つのファイルをランダムに取得し、それらをメモリに読み込み、それらをカプセル化する新しい Request を作成したいと考えています。

私はc#で作業していますが、この行は機能します:

var a = Sample.GetRootAsSample(new ByteBuffer(System.IO.File.ReadAllBytes(pathToA))); 
var b = Sample.GetRootAsSample(new ByteBuffer(System.IO.File.ReadAllBytes(pathTob)));

しかし、新しい Request インスタンスでそれらを参照する方法を見つけることができないようです。これらのバッファーをそのまま新しいビルダーに追加し、それらのオフセットをすべて同じビルダー内の新しい Request に渡す方法が必要です。新しいビルダーでもう一度ビルドするのは効率的ではありません。

どうすればこれを達成できますか?

4

1 に答える 1

1

現在、C# でテーブルを自動的にディープ コピーする方法はありません。テーブルはバッファ内のあらゆる種類の場所を参照する可能性があるため、これは簡単な操作ではなく、特別な目的のコード生成またはリフレクションが必要です。

CopyTableリフレクションを使用する C++ にはがあります。これは、C# に移植するか、C# から呼び出すことができます。

別の方法は、新しいテーブルに既存のバッファをバイナリ形式で含めることです。つまり、makeabubytes のベクトルです。GetRootAsこれは、それらにアクセスするにはそれらを呼び出す必要があることを意味しますが、これはすべて非常に効率的です.

于 2016-03-21T23:46:39.157 に答える