【问题标题】:OutOfMemoryException trying to write Xml from DataSetOutOfMemoryException 试图从 DataSet 写入 Xml
【发布时间】:2012-12-12 16:10:20
【问题描述】:

在 C# 中,我试图从大数据集中获取 xml 字符串:

private string GetXmlFromDecomposedPortfolio(string dataSetName, DecomposedPortfolio ptf)
{
     StringWriter writer = new StringWriter();

     System.Data.DataSet ds = new System.Data.DataSet(dataSetName);

     ds.Tables.Add(ptf.Security.Copy());   
     ds.WriteXml((TextWriter)writer, XmlWriteMode.IgnoreSchema);

     return writer.ToString();
}

但我有例外:

System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.     
    at System.String.GetStringForStringBuilder(String value, Int32 startIndex, Int32 length, Int32 capacity)    
    at System.Text.StringBuilder.GetNewString(String currentString, Int32 requiredLength)    
    at System.Text.StringBuilder.Append(Char value)     at System.IO.StringWriter.Write(Char value)  
    at System.Xml.XmlTextWriter.WriteStartElement(String prefix, String localName, String ns)   
    at System.Data.DataTextWriter.WriteStartElement(String prefix, String localName, String ns)  
    at System.Data.XmlDataTreeWriter.XmlDataRowWriter(DataRow row, String encodedTableName)  
    at System.Data.XmlDataTreeWriter.Save(XmlWriter xw, Boolean writeSchema)    
    at System.Data.DataSet.WriteXml(XmlWriter writer, XmlWriteMode mode)   
    at System.Data.DataSet.WriteXml(TextWriter writer, XmlWriteMode mode)    
    at Decompose.Library.Render.GetXmlFromDecomposedPortfolio(String dataSetName, DecomposedPortfolio ptf)   
    at Decompose.Library.Render.SavePE()  
    at Decompose.Library.WorkFlow.ProcessBatch()

有什么建议吗?

【问题讨论】:

标签: c# .net xml dataset out-of-memory


【解决方案1】:

首先你创建巨大的(显然)xml数据

ds.WriteXml((TextWriter)writer, XmlWriteMode.IgnoreSchema);

克隆它后,将其放入string 对象writer.ToString();,这样您所需的内存几乎翻了一番。

可以做的是创建XML row-per-row,所以创建一种XmlDataSetRowEnumerator,它检索XML-per-rowyield returns结果XML .

【讨论】:

  • 那么将数据集拆分成不同的数据集呢?
猜你喜欢
  • 2016-07-17
  • 1970-01-01
  • 1970-01-01
  • 2020-02-20
  • 1970-01-01
  • 2018-10-27
  • 1970-01-01
  • 1970-01-01
  • 2012-01-03
相关资源
最近更新 更多