我现在遇到的问题是,当表太大超过100多M的时候会报内存溢出错误,请问怎么处理啊。
这是我的XML文件转换为Dataset代码:
public static DataSet CXmlFileToDataSet(string xmlFilePath)
{
if (!string.IsNullOrEmpty(xmlFilePath))
{
//string path = Application.MapPath(xmlFilePath);
StringReader StrStream = null;
XmlTextReader Xmlrdr = null;
try
{
XmlDocument xmldoc = new XmlDocument();
//根据地址加载Xml文件
xmldoc.Load(xmlFilePath);
DataSet ds = new DataSet();
//读取文件中的字符流
StrStream = new StringReader(xmldoc.InnerXml);
//获取StrStream中的数据
Xmlrdr = new XmlTextReader(StrStream); //这行报错,文件超过100M 就报错
//ds获取Xmlrdr中的数据
ds.ReadXml(Xmlrdr);
return ds;
}
catch (Exception e)
{
throw e;
}
finally
{
//释放资源
if (Xmlrdr != null)
{
Xmlrdr.Close();
StrStream.Close();
StrStream.Dispose();
}
}
}
else
{
return null;
}
}
麻烦知道的帮忙看看谢谢啦!
问题 我自己解决了,感谢回答的朋友。我的解决办法就是将整个XML文档加载到dataset中,现在是没有问题了,但是不知道更大会不会出现问题,有待测试。
public static DataSet CXmlFileToDataSet(string xmlFilePath)
{
if (!string.IsNullOrEmpty(xmlFilePath))
{
try
{
DataSet ds = new DataSet();
ds.ReadXml(xmlFilePath);
return ds;
}
catch (Exception e)
{
throw e;
}
finally
{
//释放资源
}
}
else
{
return null;
}
}
那是,微软给你一个弹弓,就没有想到你会拿他去打嫦娥...
你换个方法实现需求吧。
哦,我也考虑过换一个方式,但是不知道换什么方式好,请问 你有啥好的建议吗?
@菜鸟C#菜鸟:
楼下是一种方式。
还有我不知道你的原始需求,怎么出招呢?
你为啥非得备份到XML里面去呢?
@爱编程的大叔: 就是我要从a服务器上选择表,选择字段然后导出,再用个cs小程序导入到B服务器,A,B服务器之间网络不通。
@菜鸟C#菜鸟: 每个技术都有一定的局限性。
老师通常不负责说这个,但你项目中碰到要懂得自己绕路。
可选的有
Access MDB (以前的记忆是超过140M容易出问题,但不一定会出)
SQLite (这个好像大点,几个G总有吧)
SQL Server Express (这个可以安装在你的笔记本上)
如果你用的是SQL Server,建议就采用最后一个了,结构都不用设计了,直接复制。
如果文件内容太多的话,多生产几个xml文件,比如a_1.xml,a_2.xml.........
这个 我也想过 但是 我不能控制导出文件的大小。要保证导出的XML文件大小在100M以能,导入才不会出问题,我想把它导出Excel表格的形式,但是应该还是会存在太大的问题吧!现在是导出没有问题,是导入时,XML文件转换为Dataset出问题
@菜鸟C#菜鸟: 应该还有其他读取xml文件的方法(比如这样:http://www.cnblogs.com/a1656344531/archive/2012/11/28/2792863.html),别用ds.ReadXml(Xmlrdr)。写读到内容,然后再写for循环把内容添加到datatable。或者直接拼写insert sql吧。