是如何LINQ從System.Xml.Linq
命名空間XML X-DOM內部實現的? (XNode,的XElement等)的LINQ to XML X-DOM內部實現
它是利用標準的高性能單向的XmlReader/XmlWriter的來自其它XML命名空間還是其他什麼東西?
的原因,我問的是,我試圖找出其中的情況下可以或應該被用作性能始終是一個問題。
是如何LINQ從System.Xml.Linq
命名空間XML X-DOM內部實現的? (XNode,的XElement等)的LINQ to XML X-DOM內部實現
它是利用標準的高性能單向的XmlReader/XmlWriter的來自其它XML命名空間還是其他什麼東西?
的原因,我問的是,我試圖找出其中的情況下可以或應該被用作性能始終是一個問題。
使用反射器(或者,當不再免費,ILSpy :);不,我不是員工 - 只是暗中傳播這個詞!)它出現所有的加載/保存方法通道到XmlReader
和XmlWriter
。 例如 - 的XElement的實施Load(Stream, LoadOptions)
做到這一點:
public static XElement Load(Stream stream, LoadOptions options)
{
XmlReaderSettings xmlReaderSettings = XNode.GetXmlReaderSettings(options);
using (XmlReader reader = XmlReader.Create(stream, xmlReaderSettings))
{
return Load(reader, options);
}
}
而且它是所有其他靜態方法類似的故事 - 包括解析。
但後來有XStreamingElement
構造函數 - 但我找不到XElement
類本身以外的任何實際用法。看起來這可能是一種優化的加載類型,但目前還沒有被使用太多。
同樣,保存和方法的writeTo最終使用XmlWriter
實例 - 例如:
public void Save(string fileName, SaveOptions options)
{
XmlWriterSettings xmlWriterSettings = XNode.GetXmlWriterSettings(options);
using (XmlWriter writer = XmlWriter.Create(fileName, xmlWriterSettings))
{
this.Save(writer);
}
}
因此,在從性能上看至少他們開始用正確的類型:)
喜@bojanskr - 注意,接受的答案不會獎獎金 - 不,我回答爲+50,但幫助:)。我清楚地知道,通過剛剛提到這一點,我可能是破禮儀(http://meta.stackexchange.com/questions/36871/etiquette-asking-questioner-to-award-bounty) - 如果是這樣我事先表示歉意給你和社區:) – 2011-03-29 10:06:12
獎勵賞金並不是問題,但是當我試圖點擊獎勵它時,它告訴我我無法獎勵另外4個小時的賞金。所以我等待並授予它。希望現在一切都好。 – TheBoyan 2011-03-29 14:59:19
@bojanskr - 當然 - 完全忘記了整個時間限制的事情,對不起:$ – 2011-03-29 15:14:29
不是一個答案你的問題,但你可能會發現這個有趣的,我已經使用它,並可以提供一個樣本。 http://blog.codebeside.org/archive/2008/09/08/streaming-xml-input-with-xelementreader.aspx – 2011-03-25 18:10:38