我有一个DataContractSerializer生成的原始XML的内存流。这个字符串可能很长,并且会生成60mb以上的文件。然后我把它读成一个字符串,然后用UTF8字节编码,然后转换成一个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中或使用流写入器写入字符串时,会遇到内存不足的异常(顺便说一句,“写入器”就是这样)。
我不太确定如何解决这个问题。我认为,以“块”的形式读取和转换原始流可能是前进的方向,但我不确定这将如何影响文件的读取。