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
集合分成多个组,然后在合并上一个集合时在后台线程中读取文件。合并速度可能会快得多,因此必须在合并操作之间暂停,但由于同时读取和合并,因此速度应该会快得多。