尝试将 xml 导入到 android 时出现 OutOfMemoryException
Posted
技术标签:
【中文标题】尝试将 xml 导入到 android 时出现 OutOfMemoryException【英文标题】:OutOfMemoryException when trying to import xml to android 【发布时间】:2020-02-20 10:23:33 【问题描述】:当我尝试使用我们制作的应用程序将文件导入到我的 android 时,我有 230 mb 大、长度为 2.3 亿的 xml 文件,但是当我尝试将 readtoend
字符串导入变量时出现错误:
System.outofmemoryexception : system.text.stringbuilder.tostring() 处的 (wrapper managed-to-native) system.string.fastallocatestring(int) 内存不足
下面是代码
var documentsPath = Android.OS.Environment.ExternalStorageDirectory.ToString();
var dirName = System.IO.Path.Combine(documentsPath.ToString(), "Stock");
var filePath = System.IO.Path.Combine(dirName, "Data.xml");
TextReader tr = new StreamReader(filePath);
string result = tr.ReadToEnd();
tr.Close();
var st = new XStreamingElement(filePath);
return result;
谁能帮忙,提前谢谢。
【问题讨论】:
Getting OutOfMemoryException in Xamarin的可能重复 看看What is the best way to parse (big) XML in C# Code?和Reading Xml with XmlReader in C#。 【参考方案1】:尝试使用 XMLTextReader 类,如下例所示:
XmlTextReader myTextReader = new XmlTextReader(filename);
myTextReader.WhitespaceHandling = WhitespaceHandling.None;
while (myTextReader.Read())
if (myTextReader.NodeType == XmlNodeType.Element &&
myTextReader.LocalName == "Reward" &&
myTextReader.IsStartElement() == true)
ProcessRewardNode(myTextReader);
myTextReader.Skip();
这里是ProcessRewardNode的方法实现:
private void ProcessRewardNode(XmlTextReader RewardReader)
XmlDocument RewardXmlDoc = new XmlDocument();
RewardXmlDoc.LoadXml(RewardReader.ReadOuterXml());
// we can use xpath as below
myID = RewardXmlDoc.SelectSingleNode("Reward/myID").InnerText;
更多信息请访问XMLTextReader's official documentation
【讨论】:
以上是关于尝试将 xml 导入到 android 时出现 OutOfMemoryException的主要内容,如果未能解决你的问题,请参考以下文章
尝试将项目从 bitbucket 导入 android studio 时出现问题“存储库测试失败”
尝试为 Android 扩展 XML 布局时出现 Eclipse ClassCastException
ORA-06502: PL/SQL: 尝试将 XML 保存到文件时出现数字或值错误