Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 提高XML合并处理时间的方法_C#_Xml_Merge - Fatal编程技术网

C# 提高XML合并处理时间的方法

C# 提高XML合并处理时间的方法,c#,xml,merge,C#,Xml,Merge,所以我有这个代码: foreach (string xmlfilelisted in xmlFileList) { resultXml.Root.Add(XDocument.Load(xmlfilelisted).Root.Elements()); resultXml.Save(filepath); } 这基本上是合并大量相同格式的xml文件。现在,它在一分半钟内处理大约1300个文件。我想处理,比

所以我有这个代码:

        foreach (string xmlfilelisted in xmlFileList)
        {
            resultXml.Root.Add(XDocument.Load(xmlfilelisted).Root.Elements());
            resultXml.Save(filepath);
        }
这基本上是合并大量相同格式的xml文件。现在,它在一分半钟内处理大约1300个文件。我想处理,比如说20万个文件。我该怎么办?显然,上面的代码并不实用

任何链接或片段将不胜感激。谢谢大家

尝试将
Save()
方法调用移出循环。您只需担心异常会丢弃所有结果,这样您就可以将
Save()
放在
finally
块中

try
{
    foreach (string xmlfilelisted in xmlFileList)
    {
        resultXml.Root.Add(XDocument.Load(xmlfilelisted).Root.Elements());
    }
}
finally
{
    resultXml.Save(filepath);
}

我不是足够的IO专家来帮助加快速度,但我知道任何IO操作都会减慢速度,每个循环都要做两次。将
Save
方法调用移到循环之外,并且只执行一次,将节省您一些时间该死,就是这样!我要把它记下来,作为我又一个金发女郎的时刻。谢谢如果这对你来说是足够的答案,我将把我的评论作为答案。这似乎是正确的解决方案。有没有进一步加快速度的方法?@ShoaibMohamed因为你每次都在循环中读取一个文件,瓶颈可能是IO操作,这是基于硬盘速度的限制(或网络连接,如果您正在下载文件)。考虑到文件的数量,这是不实际的,但我能想到的加速循环的唯一方法是先将所有内容读取到内存中,然后合并,但这并不能真正节省您的时间,因为您仍然需要读取文件。我同意,这可能不会产生重大影响。我正在摆脱我的习惯,但也许您可以将
xmlFileList
集合分成多个组,然后在合并上一个集合时在后台线程中读取文件。合并速度可能会快得多,因此必须在合并操作之间暂停,但由于同时读取和合并,因此速度应该会快得多。