实际上我试图将一个巨大的Xml
传递给我的存储过程,但我总是得到一个of memory exception
,因为我试图传递一个限制大小的string
到2G。那么如何做到这一点呢。
答案 0 :(得分:2)
不要使用XmlDocument
- 将内存量作为源文档的10倍,将DOM完全加载到内存中。
如果您需要在将文档传递给SQL之前对文档进行操作,请使用XmlReader
和XmlWriter
或XDocument
。这些将起作用,因为它们将进行流处理(特别是XmlReader / XmlWriter,它们针对XML数据的仅向前读取进行了大量优化),而不是试图一次性加载整个文档及其DOM(如XmlDocument)。 p>
从文件中加载格式良好的XML:
command.Parameters.Add(new SqlParameter("@xmlParameterName", SqlDbType.Xml)
{
Value = new SqlXml(XmlReader.Create("C:\\path\\to\\file.xml"));
});
从流中加载XML数据
Stream s;
// XML is in this stream
command.Parameters.Add(new SqlParameter("@xmlParameterName", SqlDbType.Xml)
{
Value = new SqlXml(XmlReader.Create(s));
});
从XDocument加载:
XDocument xd = XDocument.Load/.Parse/etc....
command.Parameters.Add(new SqlParameter("@xmlParameterName", SqlDbType.Xml)
{
Value = new SqlXml(xd.Root.CreateReader());
});
答案 1 :(得分:0)
你尝试过使用StringBuilder吗? reference