首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将大型XML文件导入Server

将大型XML文件导入Server
EN

Stack Overflow用户
提问于 2015-04-03 06:36:16
回答 1查看 1.3K关注 0票数 1

我尝试将数据从XML文件导入Server数据库。我使用ErikEJ Server压缩批量插入库(来自NuGet) codeplex上的这个库。我创建数据库和表。然后,我将XML读取到DataTable,并将此DataTable导入DB表。

代码语言:javascript
复制
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的一部分,有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-03 07:26:10

没有简单的libary可以帮你解决这个问题。

您需要以流的方式( 用XmlReader在C#中读取Xml )读取XML文件,以避免加载整个XML文件,然后将这些元素添加到一个列表或DataTable (最多是100000个条目)中,然后再处理/清除所有未使用的对象,直到读取完整个文件为止。

此外,对SqlCeBulkCopy的调用应该包装在使用中,以释放非托管资源:

代码语言:javascript
复制
using (SqlCeBulkCopy bulkInsert = new SqlCeBulkCopy(connString))
{
   bulkInsert.DestinationTableName = "testtable";
   bulkInsert.WriteToServer(table);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29427381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档