重新分配XmlDocument

时间:2010-09-09 09:13:54

标签: c# xml mono

我目前不得不迭代更多的.xml文件而且我被绑定到Mono(因此没有全新的.NET LINQ等)。 我使用XmlDocument加载每个XML文件,现在我的问题是,我可以为所有文件使用一个XmlDocument实例吗?

以下代码示例:

filePath = "Assets/Units/";
        // Get all files
        string [] files = GetAllFiles(filePath);
        // And iterate through them
        xFile = new XmlDocument(); // create xFile once
        foreach (string file in files)
        {
            xFile = new XmlDocument(); // or create it each time a new file must be opened / parsed?
            // do something
        }

3 个答案:

答案 0 :(得分:4)

我认为在每次迭代中创建一个新实例将是 cleaner 。我也在循环中声明变量。每次迭代中的文档之间没有逻辑关联,因此为什么要重用相同的对象。我怀疑它会起作用,但IMO更难以推理。如果您将现有实例“泄漏”引用到代码中的其他位置,则内容将突然发生变化,可能是意外。

(顺便说一句,如果您使用的是.NET 3.5或更高版本,我会强烈考虑使用LINQ to XML ...这通常是一个更令人愉快的API。)

答案 1 :(得分:2)

通常,为每个文件创建一个新的XmlDocument实例应该没有问题。在遇到任何性能/内存问题 1 之前,我不会这样做。但如果您遇到问题,请在优化之前先使用分析器,这将显示实际问题所在。

foreach (string file in GetAllFiles("Assets/Units/"))
{
    XmlDocument xFile = new XmlDocument(); 
    xFile.Load(file);

    // do something
}

1 您可能会看到一个好处,例如当重新使用大型数组结构时,我实际上怀疑你会看到XmlDocument带来的好处,因为加载新文档无论如何都会分配新内存。

答案 2 :(得分:2)

如果您担心性能,并且没有更新XML文件,那么考虑使用XPathDocument而不是XmlDocument是值得的。