2009-02-04 53 views
3

阿羅哈,什麼是Deserialze一個XML文件

我有,我想反序列化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服務接收的。

+0

你想應用什麼樣的轉換?您是否考慮過使用XSLT(與XmlReader或XPathDocument結合使用)? – 2009-02-04 15:42:39

+0

哪行代碼花費更多時間?關於創建serilizer還是關於反序列化本身? – 2009-05-05 10:44:52

回答

3

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

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

什麼方法最好取決於你想要對XML數據做什麼。你只需要提取某些值,或者你需要編輯整個文檔對象模型?

2

是的,它使用反射,但性能是一個灰色地帶。當談論一個8MB的文件...是的,它會慢得多。但是,如果處理一個小文件,它不會。

我不會說讀取文件瓶XmlReader或XPath會更容易或更快。然後告訴某些東西把你的xml轉換成一個對象或者你的對象轉換成XML ...更容易些?不多。

現在,如果您需要細粒度控制,那麼您可能需要手動完成。

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

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

1

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

相關問題