OutOfMemoryException при попытке импортировать XML в Android - PullRequest
4 голосов
/ 24 октября 2019

У меня есть XML-файл размером 230 МБ и длиной 230 миллионов, когда я пытаюсь импортировать файл на свой Android с помощью приложения, которое мы создали, но при попытке readtoend строки в переменную я получаю сообщение об ошибке:

System.outofmemoryexception: нехватка памяти в (управляемая оболочка) system.string.fastallocatestring (int) в system.text.stringbuilder.tostring ()

вот следующий код

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;

Может кто-нибудь помочь, заранее спасибо.

1 Ответ

7 голосов
/ 24 октября 2019

Попробуйте использовать XMLTextReader class вместо этого в качестве примера ниже:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...