0

非常に大きな文字列データ (100 Mb) を Xml に保存すると、非常に奇妙なメモリ不足の例外が発生します。よくわかりません。何が起こっているのかについて何か考えがある人はいますか?2.0フレームワークのみを使用するように制限しました。

Exception Stack:

System.OutOfMemoryException was unhandled
Message=Exception of type 'System.OutOfMemoryException' was thrown.
Source=mscorlib
StackTrace:

at System.IO.MemoryStream.set_Capacity(Int32 value)
at System.IO.MemoryStream.EnsureCapacity(Int32 value)
at System.IO.MemoryStream.Write(Byte[] buffer, Int32 offset, Int32 count)
at System.IO.StreamWriter.Flush(Boolean flushStream, Boolean flushEncoder)
at System.IO.StreamWriter.Write(Char value)
at System.Xml.XmlTextWriter.InternalWriteEndElement(Boolean longFormat)
at System.Xml.XmlTextWriter.WriteEndElement()
at System.Xml.XmlWriter.WriteElementString(String localName, String ns, String 

サンプルコード:

StreamWriter streamWriter = new StreamWriter( stream );
XmlTextWriter textWriter = new XmlTextWriter(streamWriter);
XmlWriter writer = textWriter;
writer.WriteStartDocument( true );
4

1 に答える 1

1

あなたのコードはこれを示していませんが、「使用」を使用して XMLWriter ストリームを正しく開いたり閉じたりすることはできません。本当にメモリに書き込みたい場合は、StringBuilder を渡します。これを試して: -

using System;
using System.Text;
using System.Xml;
public class Test {
    static void Main()
    { 
        XmlWriterSettings settings = new XmlWriterSettings();
        StringBuilder builder = new StringBuilder();
        using (XmlWriter writer = XmlWriter.Create(builder, settings))
        {
            writer.WriteStartDocument();
            writer.WriteStartElement("root");
            writer.WriteStartElement("element");
            writer.WriteString("content");
            writer.WriteEndElement();
            writer.WriteEndElement();
            writer.WriteEndDocument();
            writer.Flush();
        }
        Console.WriteLine(builder);
}

}

于 2012-12-12T12:37:45.240 に答える