我試圖簡單地從Xml文件加載一個非常大的字符串並將其保存到IXmlSerializable#ReadXml
方法中的臨時文件中,正在使用的代碼如下所示。從Xml文件加載大字符串時出現OutOfMemoryException
問題是我在reader.ReadStartElement("data");
行上得到了OutOfMemoryException
。看起來XmlReader
正在嘗試預加載值字符串,因爲它在這種情況下約爲500Mb,因此它無法爲其分配StringBuilder
。
是否有一些更好的方法將此字符串複製到文件中,或以某種方式繞過XmlReader
的預加載?
public void ReadXml(XmlReader reader)
{
// Read other elements
reader.ReadStartElement("data");
this.dataFile = Path.GetTempFileName();
FileStream tempFile = File.Create(this.dataFile);
char[] buffer = new char[CHUNK_SIZE];
int count;
using (StreamWriter writer = new StreamWriter(tempFile))
{
while ((count = reader.ReadValueChunk(buffer, 0, CHUNK_SIZE)) != 0)
{
writer.Write(buffer, 0, count);
}
}
reader.ReadEndElement();
}
ouch;這是...棘手。我認爲現在已經遲到了,可能xml不是500Mb機箱的正確格式? – 2010-12-09 21:34:14