尝试将 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 时出现问题“存储库测试失败”

每次尝试将项目导入eclipse时出现Java问题

尝试为 Android 扩展 XML 布局时出现 Eclipse ClassCastException

ORA-06502: PL/SQL: 尝试将 XML 保存到文件时出现数字或值错误

尝试将 Android 应用程序上传到 Play 商店时出现问题

尝试将音频文件上传到服务器时出现Android问题