簡體   English   中英

反序列化XML文件的最有效方法是什么

[英]What is the most efficient way to Deserialze an XML file

阿羅哈,

我有一個8MB XML文件,我希望反序列化。 我正在使用此代碼:

public static T Deserialize<T>(string xml)
{
    TextReader reader = new StringReader(xml);
    Type type = typeof(T);
    XmlSerializer serializer = new XmlSerializer(type);
    T obj = (T)serializer.Deserialize(reader);
    return obj; 
}

這段代碼運行大約一分鍾,這對我來說似乎相當慢。 我曾嘗試使用sgen.exe預編譯序列化dll,但這並沒有改變性能。

我還有哪些其他選擇來提高性能?

[編輯]我需要反序列化創建的對象來執行(基本)轉換。 XML是從外部Web服務接收的。

XmlSerializer使用反射,因此如果性能問題,則不是最佳選擇。

您可以使用XmlDocumentXDocument類構建XML文檔的DOM並使用它,或者甚至更快地使用XmlReader 但是, XmlReader要求您自己編寫任何對象映射(如果需要)。

最好的方法取決於您想要對XML數據做什么。 您只需要提取某些值,還是必須工作和編輯整個文檔對象模型?

是的它確實使用了反射,但性能是一個灰色區域。 在談論8mb文件時......是的,它會慢得多。 但如果處理一個小文件,它將不會。

我不會說讀取文件樣式瓶XmlReader或XPath會更容易或更快。 然后告訴某些東西將你的xml變成一個對象或你的對象變成XML會更容易嗎? 不多。

現在,如果你需要細粒度控制,那么你可能需要手工完成。

個人選擇是這樣的。 我願意放棄一點速度來保存一堆令人討厭的令人討厭的代碼。

像軟件開發中的其他所有東西一樣,存在權衡取舍。

您可以嘗試在“T”類中編寫IXmlSerializable來編寫自定義邏輯來處理XML。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM