DataContractSerializer によって生成された生の XML のメモリ ストリームがあります。この文字列は非常に長くなる可能性があり、60 MB 以上のファイルが生成されます。次に、これを文字列に読み取り、UTF8 バイトでエンコードしてから、base 64 文字列に変換します。コード スニペットを次に示します。
// serialize to a memory stream.
rawXML = new MemoryStream();
dcs = new DataContractSerializer(vToWrite.GetType(),
null, 2147483647, false, false, null, new ClassResolver());
dcs.WriteObject(rawXML, vToWrite);
rawXML.Seek(0, SeekOrigin.Begin);
// read the stream into a raw string of XML
sr = new StreamReader(rawXML);
xmlString = sr.ReadToEnd();
rawXML.Close();
sr.Close();
// encode into base64
//bytesToEncode = Encoding.UTF8.GetBytes(xmlString);
//encodedText = Convert.ToBase64String(bytesToEncode);
// write string out
writer = File.CreateText(fullPath + "Module" + i + "D" +
historicDataCount + ".bin");
writer.Write(Convert.ToBase64String(
Encoding.UTF8.GetBytes(xmlString)));// (encodedText);
writer.Close();
// end save mod day //
私が得ている問題は、ストリームをxmlStringに読み込むとき、またはストリームライターを使用して文字列を書き出すときに、メモリ不足の例外が発生することがあることです(ちなみに「ライター」とはそうです)。
これを解決する方法がよくわかりません。元のストリームを「チャンク」で読み取って変換することがおそらく前進だと思いますが、これがファイルの読み取りにどのように影響するかはわかりません。