2016-12-21 22 views
1

私は文字列に私のオブジェクトをシリアル化したいが、私はエラーを取得しました:私は文字列に私のオブジェクトをシリアル化したいが、私はエラー「System.OutOfMemoryExceptionに」を手に入れた

System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown. 
     at System.Text.StringBuilder.ToString() 
     at System.IO.StreamReader.ReadToEnd() 
    at TEG.USBSharing.Utility.FileUtility.ValidateReadByStreamReader(StreamReader streamReader) 

これは、私のコード: (1)シリアライズ

public static string Serialization<T>(T obj) 
{ 
    using (MemoryStream memoryStream = new MemoryStream()) 
    using (StreamReader reader = new StreamReader(memoryStream)) 
    { 
     DataContractSerializer serializer = new DataContractSerializer(obj.GetType()); 
     serializer.WriteObject(memoryStream, obj); 
     memoryStream.Position = 0; 
     return FileUtility.ValidateReadByStreamReader(reader); 
    } 
} 

(2)ReadToEnd

public string ValidateReadByStreamReader(StreamReader streamReader) 
{ 
    string m_Data = string.Empty; 
    if (streamReader != null) 
    { 
     m_Data = streamReader.ReadToEnd(); 
    } 
    return m_Data; 
} 

(3)マイオブジェクト

DataPacKet m_DataPacKet = new DataPacKet() { 
    Command = DataPacKet.COMMAND_SEND_FILE_TRANSFER_CONTENT, 
    GuidId = m_Guid, 
    Data = new DataPacKetContent() 
    { 
     Sequence = i, 
     DataBase64 = Convert.ToBase64String(m_SendingBuffer), 
    }, 
    TransferType = dataPacketRequest.TransferType }; string m_MessageFileDataPacKet = 
JsonUtility.Serialization<DataPacKet>(m_DataPacKet); 

ありがとうございました。

+1

シリアル化しようとしているオブジェクトは何ですか? –

+1

ストリーム全体をメモリに読み込んでいるため、明らかに大きすぎてフィットしません。 'ValidateReadByStreamReader'は何をしていますか?確かに何も検証していないのです。おそらくストリームを一度に読み込むのではなく、ストリームを処理するようにコードを設計することができます。 – Rob

+0

ロブと同意し、そのすべてについてのメモリ消費 –

答えて

0

、あなたのシステムがあなたのオブジェクトを格納するための十分なメモリを持っていることを確認している場合は、x64の用にコンパイルしてみてください:

Visual Studioを使用している場合は、プロジェクトのプロパティに行くとx64にプラットフォームの目標を設定することができます[ビルド]タブをクリックします。

enter image description here

関連する問題