2

たとえば、私は持っています:

struct SomeStruct
{
   //some fields
   //each instance will store info read from file, maybe be 3kb, maybe more.
}

List<SomeStruct> lst = new List<SomeStruct>();

そのリストにクレイジーな量のオブジェクトを追加するので、サイズは最大10Gbs以上になります。メモリ不足などのエラーなしでlstをシリアル化できますか?後で逆シリアル化できますか?

4

1 に答える 1

1

アイテムのリストを一度にメモリに保持できる場合は、それらをシリアル化/逆シリアル化する可​​能性が十分にあります。おそらく、リスト全体を一度にシリアル化/逆シリアル化するのではなく、ストリームで個別に処理することをお勧めします。それはあなたが持っているかもしれないどんなエッジケースの世話をするでしょう。

擬似コード:

private void SerializeObjects(List<foo> foos, Stream stream)
{
    foreach (var f in foos)
    {
        stream.Write(f);
    }
}

private void DeserializeObjects(List<foo> foos, Stream stream)
{
    foo f = stream.ReadFoo();
    while (f != null)
    {
        foos.Add(f);
        f = stream.ReadFoo();
    }
}
于 2012-10-31T13:48:38.683 に答える