C#XDocument卡在内存中

时间:2019-02-21 15:22:17

标签: c# xml memory-management

基本上,我正在读取多个xml文件,从中恢复一些项目,然后从下一个文件恢复,直到所有文件都处理完毕,然后对收集的项目进行处理。

问题是每个文件约为50mb,我一次最多可能要执行70次操作,加上每个循环内存使用量(在Visual Studio的检查器中)会增加约180mb(5个文件约800mb RAM),所以我可能永远没有足够的RAM来处理它,内存超出错误以及所有这些...

我考虑过使用收益率表对每个出现的项目进行处理,但是在进行处理之前,我需要对它们进行排序。

如果有帮助,这里有一些示例代码,尝试将我的文档设置为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);
        }
    }
}

0 个答案:

没有答案