将大型XML文件导入SQL Server CE

e1s

我尝试将数据从XML文件导入SQL Server CE数据库。在codeplex上使用ErikEJ SQL Server Compact批量插入库(来自NuGet)此库我创建数据库和表。然后,我读取XMLDataTable并将其导入DataTable到DB表中。

DataSet ds = new DataSet();
ds.ReadXml("myxml.xml");
DataTable table = new DataTable();
table = ds.Tables[0];
String connString = @"Data Source = test.sdf";
SqlCeBulkCopy bulkInsert = new SqlCeBulkCopy(connString);
bulkInsert.DestinationTableName = "testtable";
bulkInsert.WriteToServer(table);

它适用于小型xml,但是当我使用大型xml(大于1gb)时,出现以下错误ReadXml

mscorlib.dll中的“ System.OutOfMemoryException”

如何解决这个问题?

更新:我知道此错误是因为我使用的是大型xml-问题是如何通过使用缓冲区或逐个读取xml来优化此算法,有什么想法吗?

埃里克·埃杰

没有简单的库可以为您解决此问题。

您需要以流方式读取XML文件(使用C#中的XmlReader读取Xml)以避免加载整个XML文件,然后对于读取的每个元素,将它们添加到List或DataTable中,最多可以输入100,000个条目,然后BulkInsert ,处置/清除所有未使用的对象,然后继续操作,直到读取了整个文件。

另外,对SqlCeBulkCopy的调用应包装在using中以处置非托管资源:

using (SqlCeBulkCopy bulkInsert = new SqlCeBulkCopy(connString))
{
   bulkInsert.DestinationTableName = "testtable";
   bulkInsert.WriteToServer(table);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章