2011-03-25 74 views
0

是如何LINQ從System.Xml.Linq命名空間XML X-DOM內部實現的? (XNode,的XElement等)的LINQ to XML X-DOM內部實現

它是利用標準的高性能單向的XmlReader/XmlWriter的來自其它XML命名空間還是其他什麼東西?

的原因,我問的是,我試圖找出其中的情況下可以或應該被用作性能始終是一個問題。

+0

不是一個答案你的問題,但你可能會發現這個有趣的,我已經使用它,並可以提供一個樣本。 http://blog.codebeside.org/archive/2008/09/08/streaming-xml-input-with-xelementreader.aspx – 2011-03-25 18:10:38

回答

2

使用反射器(或者,當不再免費,ILSpy :);不,我不是員工 - 只是暗中傳播這個詞!)它出現所有的加載/保存方法通道到XmlReaderXmlWriter。 例如 - 的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); 
    } 
} 

因此,在從性能上看至少他們開始用正確的類型:)

+0

喜@bojanskr - 注意,接受的答案不會獎獎金 - 不,我回答爲+50,但幫助:)。我清楚地知道,通過剛剛提到這一點,我可能是破禮儀(http://meta.stackexchange.com/questions/36871/etiquette-asking-questioner-to-award-bounty) - 如果是這樣我事先表示歉意給你和社區:) – 2011-03-29 10:06:12

+0

獎勵賞金並不是問題,但是當我試圖點擊獎勵它時,它告訴我我無法獎勵另外4個小時的賞金。所以我等待並授予它。希望現在一切都好。 – TheBoyan 2011-03-29 14:59:19

+0

@bojanskr - 當然 - 完全忘記了整個時間限制的事情,對不起:$ – 2011-03-29 15:14:29