【问题标题】:OutOfMemoryException when trying to import xml to android尝试将 xml 导入到 android 时出现 OutOfMemoryException
【发布时间】: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;

谁能帮忙,提前谢谢。

【问题讨论】:

标签: c# android xml xamarin


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    • 2015-10-10
    • 2020-03-21
    • 2022-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多