我目前不得不迭代更多的.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
}
答案 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是值得的。