6

我正在寫一個Windows服務應用程序,需要在其執行過程中反覆序列化和反序列化XML文檔。由於我需要序列化和反序列化在編譯期間未知的泛型類型(我不知道有多少類型需要序列化/反序列化)我想知道是否一個好主意請保留一個高速緩存DataContractSerializer對象的實例化用於序列化和反序列化對象。緩存DataContractSerializer實例是個好主意嗎?

我在問這個問題,因爲我知道緩存XmlSerializer類實例是個好主意,因爲他們在內存中創建一個動態程序集,並且內存中動態創建的程序集不會被垃圾收集。

我讀到DataContractSerializer依賴於輕量級的代碼生成,但我並不熟悉它的細節。這就是爲什麼我問這個問題,我需要了解,如果我需要實例化DataContractSerializer實例,它會導致我的內存泄漏,因爲XmlSerializer會?

我選擇使用DataContractSerializer而不是XmlSerializer來序列化內部屬性。

+0

(回覆評論) – 2009-07-18 20:37:56

回答

4

...這是一個好主意,因爲他們創造的引擎蓋下存儲動態程序集緩存XmlSerializer類的實例...

隨着XmlSerializer,它實際上取決於你是否使用簡單構造函數(new XmlSerializer(typeToHandle)),或更復雜的構造函數,允許您在運行時指定所有屬性等。如果你只使用簡單的構造函數,它會重新使用後臺程序集,所以不會有重複的懲罰。

我會預計(但尚未測試)DataContractSerializer工作類似;但肯定存在只是緩存,也許在一個靜態只讀字段

注意DataContractSerializer限制你必須提供給您的XML佈局沒有傷害......只要你確定與;-p

+0

您是否知道在使用DataContractSerializer時xml佈局有哪些限制?我想知道只是爲了確保我可以做到這一點:P – 2009-07-18 15:58:35

相關問題