6

Sto scrivendo un'applicazione di servizio Windows che ha bisogno di serializzare e deserializzare ripetutamente i documenti XML durante la sua esecuzione. Dato che ho bisogno di serializzare e deserializzare tipi generici che non sono noti durante il tempo di compilazione (non so a priori quanti tipi ho bisogno di serializzare/deserializzare) vorrei sapere se è una buona idea tenere una cache di oggetti DataContractSerializer Istanziato per serializzare e deserializzare gli oggetti.È consigliabile memorizzare le istanze di DataContractSerializer?

Sto facendo questa domanda perché so che è una buona idea memorizzare nella cache le istanze della classe XmlSerializer poiché creano un assembly dinamico in memoria sotto il cofano e gli assembly creati dinamicamente in memoria non sono garbage collection.

Ho letto che DataContractSerializer si basa sulla generazione di codice leggero, ma non sono abituale con i dettagli di esso. Ecco perché sto facendo questa domanda, ho bisogno di capire se istanzio le istanze di DataContractSerializer come necessario mi porterebbe a una perdita di memoria come sarebbe XmlSerializer?

Ho scelto di utilizzare DataContractSerializer invece di XmlSerializer per poter serializzare le proprietà interne.

+0

(risposto al commento) –

risposta

4

... è una buona idea per mettere in cache le istanze di classe XmlSerializer in quanto creano un montaggio dinamico nella memoria sotto il cofano ...

Con XmlSerializer, in realtà dipende dal fatto che si utilizza il costruttore semplice o il costruttore più complesso che consente di specificare tutti gli attributi ecc. in fase di esecuzione. Se si utilizza solo il semplice costruttore, riutilizza l'assembly in background, quindi non vi è alcuna penalità di ripetizione.

Vorrei mi aspetto (ma non ho provato) DataContractSerializer funzionare in modo simile; ma non v'è certamente nulla di male nel semplicemente cache, forse in un campo di sola lettura statica

Nota che DataContractSerializer limita il layout xml che avete a disposizione per voi ... fino a quando si è d'accordo con questo ;-P

+0

Sapete quali restrizioni sono impostate per il layout xml quando si utilizza DataContractSerializer? Mi piacerebbe sapere solo per essere sicuro che vada bene così: P –

+1

Non esiste un equivalente di [XmlAttribute], essendo il più ovvio. Se il tuo obiettivo principale è serializzare i dati, va bene (come lo sono vari altri). Se il tuo obiettivo principale è scrivere xml in un layout specifico, può essere problematico. –

Problemi correlati