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);
ありがとうございました。
シリアル化しようとしているオブジェクトは何ですか? –
ストリーム全体をメモリに読み込んでいるため、明らかに大きすぎてフィットしません。 'ValidateReadByStreamReader'は何をしていますか?確かに何も検証していないのです。おそらくストリームを一度に読み込むのではなく、ストリームを処理するようにコードを設計することができます。 – Rob
ロブと同意し、そのすべてについてのメモリ消費 –