我尝试将数据从XML文件导入Server数据库。我使用ErikEJ Server压缩批量插入库(来自NuGet) codeplex上的这个库。我创建数据库和表。然后,我将XML读取到DataTable,并将此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上得到了以下错误:
"System.OutOfMemoryException“( mscorlib.dll )
怎么解决这个问题?
更新:我知道这个错误,因为我使用了大型的xml -问题是如何优化这个算法,可以使用缓冲区或读取xml的一部分,有什么想法吗?
发布于 2015-04-03 07:26:10
没有简单的libary可以帮你解决这个问题。
您需要以流的方式( 用XmlReader在C#中读取Xml )读取XML文件,以避免加载整个XML文件,然后将这些元素添加到一个列表或DataTable (最多是100000个条目)中,然后再处理/清除所有未使用的对象,直到读取完整个文件为止。
此外,对SqlCeBulkCopy的调用应该包装在使用中,以释放非托管资源:
using (SqlCeBulkCopy bulkInsert = new SqlCeBulkCopy(connString))
{
bulkInsert.DestinationTableName = "testtable";
bulkInsert.WriteToServer(table);
}https://stackoverflow.com/questions/29427381
复制相似问题