2010-09-09 119 views
1

我目前必須遍歷更多的.xml文件,並且我必須使用Mono(所以沒有全新的.NET LINQ等)。 我使用XmlDocument加載每個XML文件,現在我的問題是,我可以使用XmlDocument的一個實例的所有文件?重新分配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 
     } 
+1

如果您使用C#,則可以使用3.5或更高版本並使用LINQ。它不是來自VS,而是來自語言。 – Adkins 2010-09-09 09:17:31

+0

真的嗎?我到處閱讀,你不能使用新的東西? – 2010-09-09 09:19:02

+1

認真。 Linq是直接從語言而不是從VS,所以只要你使用.Net 3.5或更高版本,那麼Linq就在那裏供你玩和享受。我也認爲它可能會讓你的生活更輕鬆。 – Adkins 2010-09-09 09:45:43

回答

4

我認爲這將是清潔,在每個迭代創建一個新的實例。我也會在循環中聲明變量。每個迭代中的文檔之間沒有邏輯關聯,所以爲什麼要重複使用同一個對象。我嫌疑人它會工作,但國際海事組織很難推理。如果您引用現有實例「泄漏」到代碼中的其他位置,內容將突然發生變化,可能意外。

(順便說一句,如果你使用.NET 3.5或更高版本我會認真考慮使用LINQ to XML ...這是一個普遍更舒適API)

+0

是的,'XDocument'也應該在Mono中可用。 – 2010-09-09 09:21:53

2

一般來說,應該不是一個問題爲每個文件創建一個新的XmlDocument實例。除非您遇到任何性能/內存問題,否則我不會採取其他措施。。但是如果你遇到問題,在優化之前首先使用一個分析器,這會告訴你實際問題在哪裏。

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

    // do something 
} 

您可能會看到如受益當重新使用大型陣列結構時,但我確實懷疑你會看到XmlDocument的好處,因爲加載新文檔將會分配新內存。

2

如果您關心性能,並且不更新XML文件,那麼值得考慮使用XPathDocument而不是XmlDocument。