我試圖找到最好的解決方案,以防止我們在構建Xml文檔時分配太多內存。我必須使用較少的資源構建一個相當大的Xml(Web服務必須能夠每秒處理數百個調用)。 Xml本身的結構變化不大,但是數據一直在變化。 我目前的解決方案是XDocument和XElement(LINQ)。下面是我今天在做一個快速的示例:儘可能有效地寫模板化Xml流
static Stream GetXml(string d1, string d2, string d3)
{
XElement x =
new XElement("myElement",
new XElement("myOtherElement1", d1),
new XElement("myOtherElement2", d2),
new XElement("myOtherElement3", d3));
// ... more XElement
// ... return Stream
}
當XML文件變得太大,實例化一個XDocument和數以百計的XElement變得非常昂貴和每秒滴的呼叫數量。 我目前正在考慮創建一些模板引擎,它只需簡單地串流字符串(XElement)而不需要實例化任何對象。你會怎麼做?這是正確的做法嗎?
static Stream GetXml(string d1, string d2, string d3)
{
const string xml = @"
<myElement>
<myOtherElement1>{0}</myOtherElement1>
<myOtherElement2>{1}</myOtherElement2>
<myOtherElement3>{2}</myOtherElement3>
</myElement>";
// What's the best way to {0}, {1}, {2} without allocating
// objects and using as little RAM as possible. I cannot
// use string.Format since it allocates strings.
StreamWriter sw = new StreamWriter(stream);
sw.Write(xml);
}
這個選項的缺點是你所有的字符串不能保證是XML安全的。例如,如果值爲那麼您的串行器將流出<>。使用內置的XElement和其他XML友好的方法可以保護您免受這個問題的困擾。 –