[英]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使用反射,因此如果性能問題,則不是最佳選擇。
您可以使用XmlDocument
或XDocument
類構建XML文檔的DOM並使用它,或者甚至更快地使用XmlReader
。 但是, XmlReader
要求您自己編寫任何對象映射(如果需要)。
最好的方法取決於您想要對XML數據做什么。 您只需要提取某些值,還是必須工作和編輯整個文檔對象模型?
是的它確實使用了反射,但性能是一個灰色區域。 在談論8mb文件時......是的,它會慢得多。 但如果處理一個小文件,它將不會。
我不會說讀取文件樣式瓶XmlReader或XPath會更容易或更快。 然后告訴某些東西將你的xml變成一個對象或你的對象變成XML會更容易嗎? 不多。
現在,如果你需要細粒度控制,那么你可能需要手工完成。
個人選擇是這樣的。 我願意放棄一點速度來保存一堆令人討厭的令人討厭的代碼。
像軟件開發中的其他所有東西一樣,存在權衡取舍。
您可以嘗試在“T”類中編寫IXmlSerializable來編寫自定義邏輯來處理XML。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.