2016-05-16 5 views
0

は、誰かが私に、これは大きなデータをどのように動作するかのヒントを与えることができますメモリストリームは

これらのオブジェクトは、それがためにメモリを割り当てる

public class FileEntry 
{ 
    public string FileName { get; set; } 
    public string RelativePath { get; set; } 
    public byte[] Content { get; set; } 
} 
+0

正確にはどういう意味ですか? –

+0

このコードを実行しようとすると、メモリ不足例外が発生します –

+1

ストリームに書き込んでいるデータの量はどれくらいですか?あなたは32または64ビットプロセスで作業していますか? –

答えて

2

をシリアル化する必要がありますシリアライズされたデータの合計サイズの少なくとも2倍。一度それはあなたが内部バッファを取得するためにms.GetBuffer()を使用することができますToArray()

に割り当てるが、それは最も可能性の高い大きな実際のデータよりもだことを覚えておく必要があり、新しいバッファ用メモリストリームと二度目の

。したがって、それを ms.Lengthのように使用する必要があります。

合計サイズが非常に大きい場合は、ファイルストリームを使用し、byte[]の代わりにStreamを返してください。

+2

彼は既にファイル内容を持つオブジェクトの配列を 'byte []'に直列化しているので、彼のコードは少なくともメモリの負荷を3倍*にします。間違いなく、基礎となるストリームで動作するようにリファクタリングする必要があります。 –

関連する問題