gpt4 book ai didi

c# - 带有 sqlXML 列的大型数据表抛出 System.OutOfMemoryException

转载 作者:行者123 更新时间:2023-11-30 23:25:38 24 4
gpt4 key购买 nike

我有一个具有以下结构的数据表

DataColumn sourceTblCol = new DataColumn("SourceTableName", typeof(System.Data.SqlTypes.SqlString));
importXMLMainDt.Columns.Add(sourceTblCol);
DataColumn ordinalPosCol = new DataColumn("OrdinalPosition", typeof(System.Data.SqlTypes.SqlInt32));
importXMLMainDt.Columns.Add(ordinalPosCol);
DataColumn grpNameCol = new DataColumn("GroupName", typeof(System.Data.SqlTypes.SqlString));
importXMLMainDt.Columns.Add(grpNameCol);
DataColumn entityTypeIDCol = new DataColumn("EntityTypeID", typeof(System.Data.SqlTypes.SqlInt32));
importXMLMainDt.Columns.Add(entityTypeIDCol);
DataColumn entityNameCol = new DataColumn("EntityName", typeof(System.Data.SqlTypes.SqlString));
importXMLMainDt.Columns.Add(entityNameCol);
DataColumn exportXMLCol = new DataColumn("ExportData", typeof(System.Data.SqlTypes.SqlXml));
importXMLMainDt.Columns.Add(exportXMLCol);

我正在遍历目录中的所有 xml 文件,并将该 XML 内容作为 sqlXML 添加到数据表中

xmlFiles = Directory.GetFiles(this.WrkImportFilePath, "*.xml");
foreach (string filename in xmlFiles)
{

using (XmlReader xmlReaderObj = XmlReader.Create(filename))
{
while (xmlReaderObj.Read())
{
sqlxmlObj = new SqlXml(xmlReaderObj);
}
xmlReaderObj.Close();
}
importXMLMainDt.Rows.Add(srcTableName, ordinalPos, grpName, entityTypeID, string.Empty, sqlxmlObj);
sqlxmlObj = null;

}
}

对于 2500 个 XML 文件,它工作正常,但如果文件数量超过 3000,则会抛出异常。文件的最大数量可以达到 12,000。我需要创建此数据表并将其作为表值参数传递到存储过程中。那么我该如何处理这个问题?

最佳答案

您遇到内存不足异常,因为您尝试一次性加载所有文件,然后一次性将其发送到数据库。机器内存不够大...

您有多种选择:

  1. 购买大量 RAM :-)
  2. 分段传输数据(一个接一个 ?)
  3. 如果 XML 文件位于您可以直接从 SQL Server 访问的位置,您可能会 - 容易得多! - 仅推送文件名并通过 TSQL 将 XML 加载到数据库表的列中。

以防万一您想尝试选项 3:

尝试加载您的文件之一。如果这可行,它应该适用于所有这些......

DECLARE @yourXML AS XML=
(
SELECT CONVERT(XML, BulkColumn,2) AS BulkColumn
FROM OPENROWSET(BULK 'PathToFile.xml', SINGLE_BLOB) AS x
);
SELECT @yourXML;

关于c# - 带有 sqlXML 列的大型数据表抛出 System.OutOfMemoryException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37164294/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com