C # XDocument застрял в памяти - PullRequest
       3

C # XDocument застрял в памяти

0 голосов
/ 21 февраля 2019

По сути, я читаю несколько XML-файлов, восстанавливая некоторые элементы из этого, затем следующий файл, пока все файлы не будут созданы, а затем я делаю свою вещь на собранных элементах.

Проблема в том, что каждый файл составляет ~ 50 МБи у меня может быть до 70, чтобы выполнить одну операцию, плюс при каждом использовании памяти цикла (в инспекторе Visual Studio) удары ~ 180 МБ (около 800 МБ памяти для 5 файлов), поэтому у меня никогда не будет достаточно оперативной памяти, памятиПревышено количество ошибок и все такое ...

Я думал об использовании возврата дохода для работы с каждым элементом в том виде, в каком он есть, но мне нужно отсортировать их все, прежде чем работать с ним.

ВотПример кода, если он помогает, попытался установить для моего документа значение null, как было найдено в некоторых ответах на SO, но безуспешно ...

class MyClass
{
    List<string> sourceFiles // All my XML input files
    List<XElement> listItem  // items to get from XML files

    /...

    static void FillListItem()
    {
        bool found = false;
        foreach (var sourceFile in sourceFiles)
        {
            XDocument xdoc = XDocument.Load(sourceFile);
            foreach (var inventory in xdoc.Descendants("INVENTORY"))
            {
                if (/*Checks if current item is valid*/)
                {
                    try
                    {
                        //...
                        listItems.Add(inventory);
                        found = true;
                    }
                    catch (Exception e)
                    {
                        Logs.LogReject(Filenames.rejectInvalid, inventory, e);
                        continue;
                    }
                }
                else Logs.LogReject(Filenames.rejectConfig, inventory);
            }
            xdoc = null; //doesn't seem to change anything...
            if (!found)
                Logs.LogInfo("No corresponding field in " + sourceFile);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...