2011-05-11 33 views
3

我注意到一些代碼,我幾年前寫的,同時考慮優化我認爲這可能是一個可以改進的領域。我有以下幾點:加載爲一個字符串的XML文件

var xml = new StringBuilder(""); 
foreach (var product in products) 
{ 
xml.Append(product.AsXML()); // gives an xml string. 
} 
return String.Format("<products>{0}</products>", xml); 

XML字符串可能是由於產品中的數據庫數量的增加非常大的,我想知道是否有更好的方法來做到這一點。

JD

+1

顯然,回油管可能避免串和(如果不出意外我會爲一致性的緣故)將在StringBuilder的完成。 – jv42 2011-05-11 12:28:10

+0

除此之外,你有什麼需要保持整個事情作爲一個字符串?你不能直接寫入流嗎? – jv42 2011-05-11 12:29:01

+0

最初有一個網絡服務,該字符串將傳遞給。現在已被刪除。如果我使用流,它會更快或更有效率嗎? – 2011-05-11 13:15:12

回答

1

我會使用LINQ到XML link

你可以嘗試這樣的事:

var prod = new List<string>(); 
    prod.Add("Apples"); 
    prod.Add("Oranges"); 
    var doc = new XElement("Product"); 
    foreach(String p in prod){ 


     doc.Add(new XElement("products", p)); 
    } 

    Debug.WriteLine(doc.ToString()); 

輸出這樣

<Product> 
    <products>Apples</products> 
    <products>Oranges</products> 
</Product> 

這意味着你沒有碴與字符串在一起。

乾杯

伊恩

+0

謝謝伊恩,但除非我描述,否則會更快? – 2011-05-11 13:06:01

+0

它會使代碼更緊密,使用專爲使用XML而設計的api,但是您正在尋找微型優化,獲得的收益非常有限。 – Iain 2011-05-11 13:37:06

1

表示使用LINQ to XML看起來更加像這樣的一段代碼的慣用方式:

var element = new XElement("products", 
        products.Select(p => XElement.Parse(p.AsXml()))); 

return element.ToString(); 

雖然這是更適合的情況下,你可以表示內存中的XML。如果沒有,我相信你最好的選擇是使用XmlWriter。

相關問題